Gna*_*nam 6 java multithreading threadpool
我正在使用带有固定线程池的java.util.concurrent.ExecutorService来执行任务列表.我的任务列表通常大约为80-150,我将任何时候运行的线程数限制为10,如下所示:
ExecutorService threadPoolService = Executors.newFixedThreadPool(10);
for ( Runnable task : myTasks )
{
threadPoolService.submit(task);
}
Run Code Online (Sandbox Code Playgroud)
我的用例要求甚至已完成的任务应该再次重新提交给ExecutorService,但只有在所有已提交的任务都得到服务/完成时才应该执行/再次执行.基本上,提交的任务应该以轮换方式执行.因此,在这种情况下不会有任何一种情况threadPoolService.shutdown()或threadPoolService.shutdownNow()呼叫.
我的问题是,如何实现ExecutorService服务轮换基础任务?
Aff*_*ffe 10
ThreadPoolExecutor为afterExecution提供了一个扩展点,您可以将作业放回队列的末尾.
public class TaskRepeatingThreadPoolExecutor extends ThreadPoolExecutor {
public TaskRepeatingThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
this.submit(r);
}
}
Run Code Online (Sandbox Code Playgroud)
你必须做一些更多的工作当然是在没有ExecutorService方便的工厂方法的帮助下自己实例化它,但构造函数很简单,可以理解.