少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          public class CyclicBarrier
          extends Object
          一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。因為該 barrier 在釋放等待線程后可以重用,所以稱它為循環 的 barrier。
          CyclicBarrier 支持一個可選的 Runnable 命令,在一組線程中的最后一個線程到達之后(但在釋放所有線程之前),該命令只在每個屏障點運行一次。若在繼續所有參與線程之前更新共享狀態,此屏障操作 很有用。
          以上是jdk文檔的說明

               *  現在說說我們今天活動的內容、首先我們要在公司大廳集合、然后參觀陳云故居
               *  參觀完后集合、準備去淀水湖參觀。(有3輛車、對應3個線程)
               * 
               *  我們必須等大家都到齊了才能去下個地方、比如說 、在公司集合、3輛車子都到了才能出發
               *  要不然人裝不下啊。這是我們可以用到java線程并發庫的CyclicBarrier類
           
          public class CyclicBarrierTest {

              public static void main(String[] args) {

                  final CyclicBarrier cb = new CyclicBarrier(3);
                  //final Semaphore semaphore=new Semaphore(1);

                  for (int i = 1; i <= 3; i++) {
                
                      new Thread(new Runnable() {

                          @Override
                          public void run() {
                              try {
                                 
                                  //semaphore.acquire();
                                  System.out.println(Thread.currentThread().getName()
                                          + "公司大廳集合");
                                  System.out.println(Thread.currentThread().getName()
                                          + "公司大廳等待....");
                                  //semaphore.release();
                                  cb.await();
                                  Thread.sleep(2000);
                                 
                                 
                                  //semaphore.acquire();
                                  System.out.println(Thread.currentThread().getName()
                                          + "陳云故居集合");
                                  System.out.println(Thread.currentThread().getName()
                                          + "陳云故居等待....");
                                  //semaphore.release();
                                  cb.await();
                                  Thread.sleep(2000);
                                 
                                 
                                  //semaphore.acquire();
                                  System.out.println(Thread.currentThread().getName()
                                          + "淀水湖集合");
                                  System.out.println(Thread.currentThread().getName()
                                          + "淀水湖等待....準備回家了");
                                  //semaphore.release();
                                  cb.await();
                                  Thread.sleep(2000);
                                 
                                 
                              } catch (InterruptedException e) {
                                  e.printStackTrace();
                              } catch (BrokenBarrierException e) {
                                  e.printStackTrace();
                              }
                          }

                      }).start();
                  }
              }
          }
          以下是輸出結果:
          Thread-0公司大廳集合
          Thread-0公司大廳等待....
          Thread-2公司大廳集合
          Thread-1公司大廳集合
          Thread-1公司大廳等待....
          Thread-2公司大廳等待....
          Thread-0陳云故居集合
          Thread-1陳云故居集合
          Thread-2陳云故居集合
          Thread-1陳云故居等待....
          Thread-0陳云故居等待....
          Thread-2陳云故居等待....
          Thread-0淀水湖集合
          Thread-2淀水湖集合
          Thread-1淀水湖集合
          Thread-2淀水湖等待....準備回家了
          Thread-0淀水湖等待....準備回家了
          Thread-1淀水湖等待....準備回家了

          ***注意上述代碼中的Semaphore類、它也是java線程并發庫中的一個類、更多具體作用我們以后再探討。
          以下是使用Semaphore后的輸出結果:(相信你已經知道不同的地方了)
          Thread-0公司大廳集合
          Thread-0公司大廳等待....
          Thread-1公司大廳集合
          Thread-1公司大廳等待....
          Thread-2公司大廳集合
          Thread-2公司大廳等待....
          Thread-2陳云故居集合
          Thread-2陳云故居等待....
          Thread-1陳云故居集合
          Thread-1陳云故居等待....
          Thread-0陳云故居集合
          Thread-0陳云故居等待....
          Thread-2淀水湖集合
          Thread-2淀水湖等待....準備回家了
          Thread-1淀水湖集合
          Thread-1淀水湖等待....準備回家了
          Thread-0淀水湖集合
          Thread-0淀水湖等待....準備回家了

          http://blog.sina.com.cn/s/blog_7f448c520101219g.html
          posted on 2013-01-08 00:39 abin 閱讀(427) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 阿图什市| 瓮安县| 宜春市| 河西区| 江孜县| 湘阴县| 庐江县| 张家界市| 开鲁县| 合山市| 乐至县| 榆林市| 苗栗县| 乡宁县| 利辛县| 湖北省| 沙洋县| 从化市| 高唐县| 云梦县| 阜宁县| 肃北| 都江堰市| 霍山县| 苗栗县| 樟树市| 灵武市| 博罗县| 同江市| 长武县| 卢氏县| 铁岭县| 揭西县| 黑龙江省| 武胜县| 洛南县| 温宿县| 大港区| 唐海县| 牡丹江市| 萍乡市|