一,Executor,ExecutorService,Executors
- 1,Executors
java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分.在java类库中,任务执行的主要抽象不是Thread,而是Executor.
** Executor提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法**。通常使用 Executor 而不是显式地创建线程。
public interface Executor {
void execute(Runnable command);
}
- 2,ExecutorService
为了解决执行服务的生命周期,ExecutorService接口扩展了Executor接口,添加了一些用于生命周期管理的方法
public interface ExecutorService extends Executor {
//平缓的关闭过程:不接受新的任务,同时等待已经提交的任务完成(包括哪些还没有开始执行的任务
void shutdown();
//执行粗暴的关闭过程:他将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException;
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
throws InterruptedException;
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
throws InterruptedException, ExecutionException;
<T> T invokeAny(Collection<? extends Callable<T>> tasks,
long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
- 3,Executors
Executor框架的一个工具类
Executor框架.png
二,线程池
newFixedThreadPool
newFixedThreadPool创建一个固定长度的线程池,每当提交一个任务时就创建一个线程,直到达到线程池的最大数量,这时线程池的规模将不再变化.如果某个线程由于发生了未预期的Excepiton而结束,那么线程池会补充一个新的线程newCachedThreadPool
newCachedThreadPool将创建一个可缓存的线程池,如果线程池的当前规模超过了处理请求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模不存在任何限制newSingleThreadExecutor
newSingleThreadExecutor是一个单线程的Executor,他创建单个工作者线程来执行任务,如果这个线程异常结束,会创建另一个线程来替代. newSingleThreadExecutor确保按照任务在队列中的顺序来串行执行newScheduledThreadPool
newScheduledThreadPool创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务.
参考:
<<java编发编程实战>>