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