ExecutorService是异步处理的完整解决方案。它管理内存中队列并根据线程可用性计划提交的任务。
要使用ExecutorService,我们需要创建一个Runnable类。
public class Task implements Runnable {
@Override
public void run() {
// task details
}
}
现在我们可以创建ExecutorService实例并分配此任务。在创建时,我们需要指定线程池大小。
ExecutorService executor = Executors.newFixedThreadPool(10);
如果我们要创建单线程ExecutorService实例,我们可以使用newSingleThreadExecutor(ThreadFactory threadFactory)来创建实例。
创建执行程序后,我们可以使用它来提交任务。
public void execute() {
executor.submit(new Task());
}
我们还可以在提交任务时创建Runnable实例。
executor.submit(() -> {
new Task();
});
它还带有两个开箱即用的执行终止方法。第一个是shutdown() ; 它等待所有提交的任务完成执行。另一种方法是执行shutdownNow() whic ħ立即终止所有未决/执行的任务。
还有另一种方法awaitTermination(长超时,TimeUnit单元)强制阻塞,直到所有任务在触发关闭事件或执行超时发生后完成执行,或者执行线程本身被中断,
try {
executor.awaitTermination( 20l, TimeUnit.NANOSECONDS );
} catch (InterruptedException e) {
e.printStackTrace();
}