愛睡覺的程序員

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks
          <2015年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

               CyclicBarrier,讓多線程齊步走。讓多個線程到達某一個點之后,再同時往下運行。
              思考這樣一個案例:兩個工人從兩端挖掘隧道,各自獨立奮戰(zhàn),中間不溝通,如果兩人在匯合點處碰頭了,則表明隧道已經(jīng)挖通。這描繪的也是在多線程編程中,兩個線程獨立運行,在沒有線程間通信的情況下,如何解決兩個線程匯集在同一原點的問題。Java提供了CyclicBarrier(關(guān)卡,也有翻譯為柵欄)工具類來實現(xiàn)。
              代碼如下:
            1 import java.util.Random;
           2 import java.util.concurrent.CyclicBarrier;
           3 import java.util.concurrent.TimeUnit;
           4 
           5 public class CyclicBarrierTest {
           6     public static void main(String[] args) {
           7         // 設(shè)置匯集數(shù)量,以及匯集完成后的任務(wù)
           8         CyclicBarrier cb = new CyclicBarrier(2, new Runnable() {
           9             public void run() {
          10                 System.out.println("隧道已經(jīng)打通!");
          11             }
          12         });
          13         // 工人1挖隧道
          14         new Thread(new Worker(cb), "工人1").start();
          15         // 工人2挖隧道
          16         new Thread(new Worker(cb), "工人2").start();
          17     }
          18 
          19 
          20     static class Worker implements Runnable {
          21         // 關(guān)卡
          22         private CyclicBarrier cb;
          23 
          24         public Worker(CyclicBarrier _cb) {
          25             cb = _cb;
          26         }
          27 
          28         public void run() {
          29             try {
          30                 TimeUnit.SECONDS.sleep(new Random().nextInt(10));
          31                 System.out.println(Thread.currentThread().getName() + "-到達匯合點");
          32                 // 到達匯合點
          33                 cb.await();
          34             } catch (Exception e) {
          35                 // 異常處理
          36             }
          37         }
          38     }
          39 }
          40 
          posted on 2015-02-27 11:50 polang 閱讀(248) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 马尔康县| 巧家县| 苏尼特右旗| 本溪| 沈丘县| 汉沽区| 揭西县| 集贤县| 驻马店市| 北辰区| 晋州市| 武乡县| 乡宁县| 响水县| 康平县| 文水县| 固阳县| 保康县| 合肥市| 万安县| 绥化市| 和平区| 青铜峡市| 贵港市| 泰宁县| 石泉县| 石城县| 维西| 南丹县| 昌图县| 文昌市| 买车| 通许县| 喜德县| 天津市| 北安市| 扬州市| 涟源市| 鹤山市| 山丹县| 久治县|