📅  最后修改于: 2023-12-03 15:30:40.709000             🧑  作者: Mango
ExecutorService
是Java中的一个接口,用于管理线程的执行。它提供了一些方法,可以创建和管理线程池,以及安排任务执行。
使用ExecutorService
接口,首先需要创建一个线程池。可以使用静态方法Executors.newFixedThreadPool(int nThreads)
创建一个线程池:
ExecutorService executor = Executors.newFixedThreadPool(10);
这里创建的线程池可以同时运行10个线程。可以将任务提交到线程池中进行执行:
executor.submit(new Runnable() {
@Override
public void run() {
// 执行任务
}
});
这里将一个Runnable
对象提交到线程池中进行执行。如果想获得任务的执行结果,可以使用带泛型的submit(Callable<T> task)
方法。例如:
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() throws Exception {
// 执行任务,并返回结果
return "result";
}
});
这里将一个Callable
对象提交到线程池中进行执行,并返回一个Future
对象。可以通过Future
对象获得任务执行的结果,例如:
String result = future.get();
这里会阻塞当前线程,直到任务执行完成并返回结果。
当不再需要使用ExecutorService
时,需要将其关闭。可以使用shutdown()
方法关闭线程池,该方法会等待所有任务执行完成后再关闭线程池:
executor.shutdown();
如果希望线程池立即关闭并停止所有任务,可以使用shutdownNow()
方法:
executor.shutdownNow();
ExecutorService
接口有多个实现类,分别适用于不同的应用场景。
ThreadPoolExecutor
:最常用的实现类,用于创建线程池。ScheduledThreadPoolExecutor
:用于创建可以调度延时任务或者周期性任务的线程池。ForkJoinPool
:用于并行计算。通过使用ExecutorService
,可以方便地管理线程池和任务执行。在实际的开发中,经常需要使用到该接口,特别是对于需要异步执行任务的应用程序来说,更是必备的工具。