java - 多线程消息有序处理

标签 java concurrency messaging

有序多线程消息处理的常用方法是什么?

考虑以下示例:我有一个发布者将数字发送到队列中:1, 2, 3, 4, 5, 6, 7

我的目标是按顺序处理赔率和偶数。

我知道的一种可能的解决方案是每个线程有一个单独的队列,并根据 n % m 标准拆分原始队列。

我担心的是数字可能分布不均匀,我最终会得到一些线程,从而减少工作量。

我一直在考虑实现自定义队列,该队列将检查具有相同条件的队列元素是否正在由其他线程处理,如果是,则尝试找到另一个线程。这可能有效,我尝试过实现一些东西,但它变得复杂并且更难以测试。这就是为什么我首先尝试寻找问题的现有解决方案。

最佳答案

不是答案,但评论太长。

My goal is to process odds and evens sequentially.

在这种情况下,您不能拥有多个用于赔率的线程和一个用于偶数的线程。您需要顺序运行的任何原因?您是否使用process(2)的结果来运行process(4)

What I'm worried about is the fact that numbers may be distributed unevenly and I will end up with some threads to have less work to do.

有可能,但是如何在不破坏顺序约束的情况下将更多工作分配给空闲线程?

关于java - 多线程消息有序处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366824/

相关文章:

java - 名称为 "nashorn"的 ScriptEngine 为空

java - 解压 PackBits TIFF 时的 Apache-Commons Sanselan AIOOBE

go - go 编译器可以重新排序以下代码吗?

java - 在这种情况下如何实现线程?

c# - 尝试设计一个小型消息处理程序类来模拟 C# 事件。这种方法有什么缺点?

message-queue - 任何消息队列 - FIFO 要求

java - 得到一个奇怪的空指针异常

java - 有什么方法可以告诉java线程重新加载缓存吗?

jms - 如果没有可用的临时队列,实现请求/回复模式的最佳方式是什么?

java - 我收到错误 :cannot find symbol when compiling