首页 > 解决方案 > 将任务从一个线程池转移到另一个线程池

问题描述

我有一个线程池执行器列表,每个大小为 50,我希望某个执行器在他们的队列中没有任何待处理的作业或运行的任务少于池大小,然后他们可以从另一个执行器队列中获取作业更多任务并执行。

所以我创建了另一个线程,它在某个时间间隔内运行以下方法并轮班工作,但它运行不正常。问题

  1. 即使我给定条件,添加的任务也比它们的池大小更多,而小于池大小,但我不知道为什么转移了更多任务。
  2. 假设 pool1 的任务较少,因此从 pool1 中的其他人添加任务然后以某种方式再次将 pool1 重新返回到另一个循环迭代中的某个其他池中,但工作不正常,它发生在许多池中。

有没有其他方法可以做到这一点。我不认为我这样做的方式很好,而且效果不佳。

请提出一种方法。

public void shiftTaskInIdleThreadPool() {
    for(ThreadPoolExecutor executor : threadPoolExecutorsList){
        if(executor.getCorePoolSize() > executor.getActiveCount()){
            for (ThreadPoolExecutor executor1 : threadPoolExecutorList){
                while(executor1.getQueue().size() > 0 && executor.getActiveCount() < executor.getCorePoolSize()){
                    executor.execute(executor1.getQueue().remove());
                }
            }
        }
    }
}

标签: javamultithreadingthreadpoolexecutor

解决方案


推荐阅读