1. public interface Executor {
  2. void execute(Runnable command);
  3. }
  4. public interface ExecutorService extends Executor {
  5. void shutdown();
  6. List<Runnable> shutdownNow();
  7. boolean isShutdown();
  8. boolean isTerminated();
  9. <T> Future<T> submit(Callable<T> task);
  10. <T> Future<T> submit(Runnable task, T result);
  11. Future<?> submit(Runnable task);
  12. ...
  13. }
  14. public class Executors {
  15. public static ExecutorService newCachedThreadPool() {
  16. return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
  17. new SynchronousQueue<Runnable>());
  18. }
  19. ...
  20. }

线程池顶级接口Executor,真正线程池接口ExecutorService,ExecutorService默认实现是ThreadPoolExecutor;普通类Executors里面调用的就是ThreadPoolExecutor。

对象:

CachedThreadPool() 可缓存线程池

  • 线程数无限制
  • 有空闲线程就复用空闲线程,若无则新建线程
  • 一定程度减少频繁创建/销毁线程,减少系统开销

FixedThreadPool() 定长线程池

  • 可控制线程最大并发数(同时执行的线程数)
  • 超出的线程会在队列中等待

ScheduledThreadPool() 定长线程池

  • 支持定时及周期性任务执行

SingleThreadExecutor() 单线程化的线程池

有且仅有一个工作线程执行任务 所有任务按照指定顺序执行,即遵循队列的入队出队规则

优点:

  • a. 重用存在的线程,减少对象创建、消亡的开销,性能佳
  • b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。
  • c. 提供定时执行、定期执行、单线程、并发数控制等功能。