我是使用Java多线程和并发工具的新手。我正在实现一个具有事件生成器的应用程序(我们称之为EventProducer
)。 EventProducer
有一个线程池FixedThreadPool
,每个事件要发送一个新线程,并向该池提交一个新的EventProcessor
线程。
没关系,每个事件到达时都会在池中创建一个线程。但是问题在于,我想将该EventProcessor
线程(特定于每个事件请求)与应该被应用程序范围限制的两个线程进行通信,我的意思是,我在应用程序中仅拥有它们的一个实例,让我们说Service1
和Service2
。它们都具有线程池,以便能够同时处理任务。
特定的EventProcessor
将任务集发送到Service1
,并返回每个任务的响应。对于这些响应,我一直在寻找CompletionService,但是我不知道如何将其与Blocking queues集成以进行双向通信。之后,根据该响应,EventProcessor
发送一个或另一个动作以在Service2
中执行。 Service2
还将有关该操作的响应发送到EventProcessor
。
有人知道我该如何解决这个问题?我需要一个介绍才能实现第一步。汇集您的想法。
最佳答案
线程间通信的最佳对象是BlockingQueue
。它们具有超柔韧性和线程安全性,通常可以满足所有要求。
BlockingQueue<Task> queue = new LinkedBlockingQueue<>();