Tag: phaser

灵活的CountDownLatch?

我现在遇到了两次问题,即生产者线程生成N个工作项,将它们提交给ExecutorService ,然后需要等到所有N个项都被处理完毕。 注意事项 N事先不知道 。 如果是这样的话,我只需创建一个CountDownLatch ,然后让生产者线程await()直到所有工作完成。 使用CompletionService是不合适的,因为尽管我的生产者线程需要阻塞(即通过调用take() ),但没有办法表明所有工作都已完成 ,导致生产者线程停止等待。 我目前最喜欢的解决方案是使用整数计数器,并在提交工作项时递增它,并在处理工作项时递减它。 在所有N个任务的提交之后,我的生产者线程将需要等待一个锁,检查counter == 0是否通知。 如果消费者线程已经递减计数器并且新值为0,则消费者线程将需要通知生产者。 有没有更好的方法来解决这个问题,或者java.util.concurrent是否有合适的构造我应该使用而不是“滚动自己的”? 提前致谢。