Java 5+具有完成此类任务所需的所有工具。你将要:
- 将你所有的生产者合二为一
ExecutorService
; - 把你所有的消费者放在另一个
ExecutorService
; - 如有必要,请使用进行两者之间的通信
BlockingQueue
。
我对(3)说“如有必要”,因为根据我的经验,这是不必要的步骤。你要做的就是向消费者执行者服务提交新任务。所以:
final ExecutorService producers = Executors.newFixedThreadPool(100);final ExecutorService consumers = Executors.newFixedThreadPool(100);while () { producers.submit(...);}producers.shutdown();producers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);consumers.shutdown();consumers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);因此producers直接提交给consumers。



