歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java多線程問題之同步器CyclicBarrier

Java多線程問題之同步器CyclicBarrier

日期:2017/3/1 10:17:41   编辑:Linux編程

還是上次的Oracle遷移到mysql的遺留問題(見 http://www.linuxidc.com/Linux/2012-06/61668.htm ),當我在查看數據的時候,發現兩個庫數據量不一致。最後證實了我的看法,我修改代碼時將10個進程簡成1個單線程來完成了。所以數據量會少那麼多呢。

原因很簡單當時就是這個函數CyclicBarrier,當時不理解具體的意思:

  1. if (sessionParameter.getSourceThreadNum() > 1) {
  2. System.out.println("多線程運行");
  3. CyclicBarrier barrier = new CyclicBarrier(sessionParameter
  4. .getSourceThreadNum() + 2);
  5. for (int i = 0; i <= sessionParameter.getSourceThreadNum(); i++) {
  6. dataSyncThread dataSync = new dataSyncThread(barrier, i,
  7. sDataSource, tDataSource, sessionParameter);
  8. dataSync.start();
  9. }
  10. long start = System.currentTimeMillis();
  11. barrier.await();
  12. barrier.await();
  13. long end = System.currentTimeMillis();

在實際應用中,有時候需要多個線程同時工作以完成同一件事情,而且在完成過程中,往往會等待其他線程都完成某一階段後再執行,等所有線程都到達某一個階段後再統一執行。 其中,的barrier就是相當於一個阻斷,障礙器,CyclicBarrier最重要的屬性就是參與者個數,另外最要方法是await()。當所有線程都調用了await()後,就表示這些線程都可以繼續執行,否則就會等待。只有達到CyclicBarrier(int number)中number的數量,才能使程序中的10個進程同步進行互不干擾。

Copyright © Linux教程網 All Rights Reserved