還是上次的Oracle遷移到mysql的遺留問題(見 http://www.linuxidc.com/Linux/2012-06/61668.htm ),當我在查看數據的時候,發現兩個庫數據量不一致。最後證實了我的看法,我修改代碼時將10個進程簡成1個單線程來完成了。所以數據量會少那麼多呢。
原因很簡單當時就是這個函數CyclicBarrier,當時不理解具體的意思:
- if (sessionParameter.getSourceThreadNum() > 1) {
- System.out.println("多線程運行");
- CyclicBarrier barrier = new CyclicBarrier(sessionParameter
- .getSourceThreadNum() + 2);
- for (int i = 0; i <= sessionParameter.getSourceThreadNum(); i++) {
- dataSyncThread dataSync = new dataSyncThread(barrier, i,
- sDataSource, tDataSource, sessionParameter);
- dataSync.start();
- }
- long start = System.currentTimeMillis();
- barrier.await();
- barrier.await();
- long end = System.currentTimeMillis();
在實際應用中,有時候需要多個線程同時工作以完成同一件事情,而且在完成過程中,往往會等待其他線程都完成某一階段後再執行,等所有線程都到達某一個階段後再統一執行。 其中,的barrier就是相當於一個阻斷,障礙器,CyclicBarrier最重要的屬性就是參與者個數,另外最要方法是await()。當所有線程都調用了await()後,就表示這些線程都可以繼續執行,否則就會等待。只有達到CyclicBarrier(int number)中number的數量,才能使程序中的10個進程同步進行互不干擾。