Java是否具有可索引的多队列线程池?

005*_*005 7 java queue multithreading threadpool

是否存在以下Java类:

  1. 可执行任务可以通过id添加,其中具有相同id的所有任务都保证不会同时运行
  2. 线程数可以限制为固定数量

一个朴素的Map解决方案很容易解决(1),但很难管理(2).类似地,我所知道的所有线程池类都将从单个队列中拉出,这意味着(1)不能保证.

欢迎涉及外部库的解决方案.

ysh*_*vit 3

如果您找不到开箱即用的工具,那么自己开发应该不难。您可以做的一件事是将每个任务包装在一个简单的类中,该类读取每个 id 唯一的队列,例如:

public static class SerialCaller<T> implements Callable<T> {
    private final BlockingQueue<Caller<T>> delegates;

    public SerialCaller(BLockingQueue<Caller<T>> delegates) {
        this.delegates = delegates;
    }

    public T call() throws Exception {
        return delegates.take().call();
    }
}
Run Code Online (Sandbox Code Playgroud)

维护 id 到队列的映射以用于提交任务应该很容易。满足条件(1),然后你可以寻找条件(2)的简单解决方案,例如Executors。新的固定线程池