public interface Executor {
void execute(Runnable command);
}
public interface ExecutorService extends Executor {
void shutdown();
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
...
}
public class Executors {
public static ExecutorService newCachedThreadPool() {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
}
...
}
线程池顶级接口Executor,真正线程池接口ExecutorService,ExecutorService默认实现是ThreadPoolExecutor;普通类Executors里面调用的就是ThreadPoolExecutor。
对象:
CachedThreadPool() 可缓存线程池
- 线程数无限制
- 有空闲线程就复用空闲线程,若无则新建线程
- 一定程度减少频繁创建/销毁线程,减少系统开销
FixedThreadPool() 定长线程池
- 可控制线程最大并发数(同时执行的线程数)
- 超出的线程会在队列中等待
ScheduledThreadPool() 定长线程池
- 支持定时及周期性任务执行
SingleThreadExecutor() 单线程化的线程池
有且仅有一个工作线程执行任务 所有任务按照指定顺序执行,即遵循队列的入队出队规则
优点:
- a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。
- b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
- c. 提供定时执行、定期执行、单线程、并发数控制等功能。