Java 执行器服务:按键进行FIFO排序
我正在寻找使ExecutorService由对象(键)进行FIFO排序的方法,即Java 执行器服务:按键进行FIFO排序,java,concurrency,java-threads,Java,Concurrency,Java Threads,我正在寻找使ExecutorService由对象(键)进行FIFO排序的方法,即 对于给定的密钥,事件将按照它们到达的顺序进行处理 对于给定的密钥,一次只处理一个事件 内蒂3号有一个电话号码,但和内蒂有联系 番石榴有,但不清楚它是否能保证先进先出 我可以使用类似的方法锁定密钥,但为了保证FIFO,我必须冒着在调度程序线程中争用的风险 这个问题有什么通用的解决方案吗?如果你想简单,我会使用很多这样的FIFO执行器 static final int executors = Runtime.getRu
这个问题有什么通用的解决方案吗?如果你想简单,我会使用很多这样的FIFO执行器
static final int executors = Runtime.getRuntime().availableProcessors() * 2;
ExecutorService[] executors = new ExecutorService[executors];
// fill with single threaded executors.
public Future submit(Object actorId, Runnable r) {
int h = (actorId.hashCode() & 0x7FFF_FFFF) % executors;
return executors[h].submit(r);
}
除非工作负载高度不平衡,否则这将使所有CPU保持忙碌,而无需锁定。使用Akka actors(比
ExecutorService
稍微复杂一点,但您的需求是内置的)。这是有意义的。是否有任何理由在Math.abs()上使用&0x7FFF\u FFFF?@bcoughlan是的,Math.abs(Integer.MIN\u VALUE)==Integer.MIN\u VALUE,这将是40亿次中的1。i、 e.难以通过测试发现。