我对 Java 多线程和并发工具的使用相对较新。我正在实现一个具有事件生成器的应用程序(我们称之为EventProducer
)。 EventProducer
有一个线程池 FixedThreadPool
,其中每个要处理的事件发送一个新线程,向池中提交一个新的 EventProcessor
线程。
一切顺利,每个事件到达时都会在池中创建一个线程。但问题是我想将 EventProcessor
线程(特定于每个事件请求)与两个应该属于应用程序范围的线程进行通信,我的意思是,我只有它们的一个实例在应用程序中,假设 Service1
和 Service2
。它们都有线程池,能够并发处理任务。
特定的 EventProcessor
向 Service1
发送任务集,并返回每个任务的响应。对于这些回复,我寻找了 CompletionService但我不知道如何将它与 Blocking queues 集成用于双向通信。之后,根据该响应,EventProcessor
发送一个或另一个操作以在 Service2
中执行。 Service2
还将向 EventProcessor
发送有关该操作的响应。
有人知道我该如何解决这个问题吗?我需要一个介绍才能实现第一步。汇集您的想法。
最佳答案
线程间通信的最佳对象是BlockingQueue
。它们非常灵活且线程安全,通常可以满足所有要求。
BlockingQueue<Task> queue = new LinkedBlockingQueue<>();
关于Java多线程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941007/