Java多線程問題之同步器CyclicBarrier
還是上次的oracle遷移到mysql的遺留問題,當我在查看數(shù)據(jù)的時候,發(fā)現(xiàn)兩個庫數(shù)據(jù)量不一致。最后證實了我的看法,我修改代碼時將10個進程簡成1個單線程來完成了。所以數(shù)據(jù)量會少那么多呢。
原因很簡單當時就是這個函數(shù)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();
在實際應用中,有時候需要多個線程同時工作以完成同一件事情,而且在完成過程中,往往會等待其他線程都完成某一階段后再執(zhí)行,等所有線程都到達某一個階段后再統(tǒng)一執(zhí)行。 其中,的barrier就是相當于一個阻斷,障礙器,CyclicBarrier最重要的屬性就是參與者個數(shù),另外最要方法是await()。當所有線程都調(diào)用了await()后,就表示這些線程都可以繼續(xù)執(zhí)行,否則就會等待。只有達到CyclicBarrier(int number)中number的數(shù)量,才能使程序中的10個進程同步進行互不干擾。
原文鏈接:http://blog.csdn.net/chen861201/article/details/7629933