标签: phaser

灵活的CountDownLatch?

我现在遇到了两次问题,即生产者线程生成N个工作项,将它们提交给a ExecutorService,然后需要等到所有N个项都被处理完毕.

注意事项

  • N事先不知道.如果是这样的话,我只需创建一个CountDownLatch然后拥有生产者线程,await()直到所有工作完成.
  • 使用a CompletionService是不合适的,因为虽然我的生产者线程需要阻塞(即通过调用take()),但是没有办法表明所有工作都已完成,导致生产者线程停止等待.

我目前最喜欢的解决方案是使用整数计数器,并在提交工作项时递增它,并在处理工作项时递减它.在所有N个任务的提交之后,我的生产者线程将需要等待锁定,检查是否counter == 0通知它.如果消费者线程已经递减计数器并且新值为0,则消费者线程将需要通知生产者.

有没有更好的方法解决这个问题,或者java.util.concurrent我应该使用合适的构造而不是"滚动自己的"?

提前致谢.

java concurrency multithreading countdownlatch phaser

24
推荐指数
1
解决办法
7557
查看次数

Java:jsr166y Phaser的教程/解释

这个问题是两年前提出的,但它提到的资源要么不是很有用(恕我直言),要么链接不再有效.

必须要有一些很好的教程才能理解Phaser.我已经阅读了javadoc,但是我的眼睛茫然,因为为了真正理解javadoc你必须知道如何使用这些类.

有人有什么建议吗?

java concurrency phaser

16
推荐指数
2
解决办法
5500
查看次数