我是使用Java多线程和并发工具的新手。我正在实现一个具有事件生成器的应用程序(我们称之为EventProducer)。 EventProducer有一个线程池FixedThreadPool,每个事件要发送一个新线程,并向该池提交一个新的EventProcessor线程。

没关系,每个事件到达时都会在池中创建一个线程。但是问题在于,我想将该EventProcessor线程(特定于每个事件请求)与应该被应用程序范围限制的两个线程进行通信,我的意思是,我在应用程序中仅拥有它们的一个实例,让我们说Service1Service2。它们都具有线程池,以便能够同时处理任务。

特定的EventProcessor将任务集发送到Service1,并返回每个任务的响应。对于这些响应,我一直在寻找CompletionService,但是我不知道如何将其与Blocking queues集成以进行双向通信。之后,根据该响应,EventProcessor发送一个或另一个动作以在Service2中执行。 Service2还将有关该操作的响应发送到EventProcessor

有人知道我该如何解决这个问题?我需要一个介绍才能实现第一步。汇集您的想法。

最佳答案

线程间通信的最佳对象是BlockingQueue。它们具有超柔韧性和线程安全性,通常可以满足所有要求。

BlockingQueue<Task> queue = new LinkedBlockingQueue<>();

10-06 09:34