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

wmomyfyw  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(174)

我有一个线程池执行器的列表,每个大小为50,我希望当一些执行器的队列中没有任何挂起的作业,或者运行的任务小于池大小时,他们可以从另一个执行器队列中获取一个作业,该队列具有更多的任务和执行。
因此,我创建了另一个线程,在某个时间间隔和轮班作业中运行下面的方法,但效果不好。问题
即使在给定的条件下,添加的任务也比池大小多,而比池大小少,但我不知道为什么会转移更多的任务。
假设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());
                }
            }
        }
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题