将任务从一个线程池转移到另一个线程池

时间:2020-08-21 17:35:56

标签: java multithreading threadpoolexecutor

我有一个线程池执行程序的列表,每个线程的大小为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());
                }
            }
        }
    }
}

0 个答案:

没有答案
相关问题