Java多线程通信

标签 java multithreading

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

一切顺利,每个事件到达时都会在池中创建一个线程。但问题是我想将 EventProcessor 线程(特定于每个事件请求)与两个应该属于应用程序范围的线程进行通信,我的意思是,我只有它们的一个实例在应用程序中,假设 Service1Service2。它们都有线程池,能够并发处理任务。

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

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

最佳答案

线程间通信的最佳对象是BlockingQueue。它们非常灵活且线程安全,通常可以满足所有要求。

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

关于Java多线程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941007/

相关文章:

java - 从 maven 调用时无法使用 ant 构建

java - 让 Ant 把依赖的 jar 放在 ./lib

Java:在上一行完成运行之前执行行?

multithreading - 在 python 中使用 get_nowait() 而不引发空异常

.net - 哈希表并发

java - 如何管理ThreadPoolTask​​Executor来阻止某些请求

java多线程应用程序更新数据库

java - 将字节数组转换为 IntStream 的最佳方法是什么?

c - POSIX 线程/信号 : Portable way to determine to which thread a signal was delivered?

java - 如何衡量该算法的时间复杂度(Big-O)?