是否有这样的 Java 类:

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

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

    欢迎使用涉及外部库的解决方案。

    最佳答案

    如果你没有找到开箱即用的东西,那么推出你自己的东西应该不难。您可以做的一件事是将每个任务包装在一个简单的类中,该类读取每个 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();
        }
    }
    

    维护 id 到队列以提交任务的映射应该很容易。那满足条件(1),然后你可以寻找条件(2)的简单解,比如Executors. newFixedThreadPool

    10-08 11:55