线程池-Executor的设计概览
2020-08-06 本文已影响0人
rock_fish
Executor
此接口将任务
与任务的具体执行实现
分离;不同的策略就有不同的具体实现。
任务类型为Runnable,忽略任务结果。
从注释中可知,实际执行任务的线程可以是以下情况:
- 新线程
- 线程池
- 调用者线程
public interface Executor {
/**
* Executes the given command at some time in the future. The command
* may execute in a new thread, in a pooled thread, or in the calling
* thread, at the discretion of the {@code Executor} implementation.
*/
void execute(Runnable command);
}
ExecutorService
1. Callable任务
通过submit扩展了Executor,可操作的任务类型Callable,可通过Future.get()以阻塞的方式获取任务结果。
public interface ExecutorService extends Executor{
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
}
2.可关闭、终止
默认情况下,线程池中的线程是非守护线程,在线程池不在需要的时候,需要手动的关闭,调用shutdown
或者shutdownNow
方法,通过isShutdown
来判断是否已关闭。等待终止awaitTermination
,判断是否终止状态isTerminated
。
AbstractExecutorService
抽象类,实现ExecutorService,提供了几个方法的具体实现。
ThreadPoolExecutor
提供了线程池执行器的具体实现。
public class ThreadPoolExecutor extends AbstractExecutorService