在java中哪里使用屏障模式?

时间:2015-02-22 15:03:07

标签: java phaser

我刚刚阅读了关于Phaser there的javadoc,并对该类的用法有疑问。 javadoc提供了一个示例,但现实生活中的例子呢?这种障碍实施在实践中可能有用吗?

1 个答案:

答案 0 :(得分:0)

我没有使用Phaser,但我使用了CountDownLatch。引用的文档说:

  

[Phaser在功能上与... CountDownLatch相似,但支持更灵活的使用。

CountDownLatch在您启动多个线程执行某些任务的任何地方都很有用,而在老年时,您可以使用Thread.join()等待它们完成。

例如:

旧学校:

Thread t1 = new Thread("one");
Thread t2 = new Thread("two");

t1.start();
t2.start();    

t1.join();
t2.join();
System.out.println("Both threads have finished");

使用CountDownLatch

public class MyRunnable implement Runnable {
    private final CountDownLatch c;  // Set this in constructor

    public void run() {
        try {
            // Do Stuff ....
        } finally {
            c.countDown();
        }
    }
}
CountDownLatch c = new CountDownLatch(2);

executorService.submit(new MyRunnable("one", c));
executorService.submit(new MyRunnable("two", c));

c.await();
System.out.println("Both threads have finished");