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
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