Где использовать барьерный рисунок в Java?
Я только что прочитал Javadoc о Phaser
там и есть вопрос об использовании этого класса. Javadoc предоставляет образец, но как насчет реального примера? Где такой барьер реализации может быть полезен на практике?
1 ответ
Я не пользовалась 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");