线程池是基于一种池化思想管理线程的工具,类似于数据库连接池、内存池,为了减少多线程程序中频繁创建、销毁、调度线程带来的额外开销,带来如下好处:

  • 降低资源的消耗,通过服用线程,减少线程的创建和销毁的开销;
  • 提高响应速度,任务到来时,无需等待线程创建即可直接执行;
  • 提高线程的可管理性,对线程资源进行统一的管控;

Java中的线程池

Java中的线程池核心实现类是ThreadPoolExecutor,实现的顶层接口是Executor,顶层接口Executor提供了一种思想:将任务提交和任务执行进行解耦。用户无需关注如何创建线程,如何调度线程来执行任务,用户只需提供Runnable对象,将任务的运行逻辑提交到执行器(Executor)中,由Executor框架完成线程的调配和任务的执行部分。ExecutorService接口增加了一些能力:(1)扩充执行任务的能力,补充可以为一个或一批异步任务生成Future的方法;(2)提供了管控线程池的方法,比如停止线程池的运行。AbstractExecutorService则是上层的抽象类,将执行任务的流程串联了起来,保证下层的实现只需关注一个执行任务的方法即可。最下层的实现类ThreadPoolExecutor实现最复杂的运行部分,ThreadPoolExecutor将会一方面维护自身的生命周期,另一方面同时管理线程和任务,使两者良好的结合从而执行并行任务。

总体设计

美团线程池文章