我正在使用java.util.concurrent.ExecutorService和固定线程池来执行任务列表。我通常会有大约80-150个任务,我已经将同时运行线程的数量限制为10个,如下所示:
ExecutorService threadPoolService = Executors.newFixedThreadPool(10);
for ( Runnable task : myTasks )
{
threadPoolService.submit(task);
}
我的使用情况要求即使已完成的任务也应该重新提交给 ExecutorService,但只有在所有已经提交的任务都被服务/完成时才会再次执行/获取。这基本上意味着已提交的任务应该按轮换方式执行。因此,在这种情况下不会有
threadPoolService.shutdown()
或 threadPoolService.shutdownNow()
的调用。我的问题是,如何实现按轮换方式服务于 ExecutorService 的任务?
ThreadPoolExecutor
类的存在。我在这里有一个问题,我需要在构造函数中传递BlockingQueue<Runnable> workQueue
是什么/如何/为什么?在ExecutorService
的情况下,我通常会像这样提交所有任务:threadPoolService.submit(task)
。我无法理解关于BlockingQueue<Runnable> workQueue
的内容。希望您能让我理解这个问题。 - GnanamBlockingQueue<Runnable>
,想在这里更新一下。BlockingQueue
主要用于保存工作/任务,当池中的所有线程都忙于执行任务时,将其发送到执行器。 - Gnanam