概述: 线程池,从字面含义来看是管理同一组同构工作线程的资源池。线程池与工作队列是密切相关的, 工作队列保存了所有等待执行的任务, 工作线程从工作队列中获取任务并执行。 通过重用线程而不是创建线程的方式, 这样做的好处是: ①. 可以避免因创建线程和销毁线程所产生的开销;②.当有任务需要执行时不会因为需要创建线程而延迟任务的执行, 从而提高响应性。③. 通过调节线程池大小, 可以使处理器尽量保持忙碌状态, 不仅可以防止创建过多的线程而导致竞争资源过于激烈从而使应用程序耗尽内存。 创建方式: 可以通过Executors来获取需要的线程池: ①. newFixedThreadPool。它会创建一个固定长度的线程池, 每提交一个任务就会创建一个线程,直到达到最大线程数为止。这时候线程池的规模就不会变化,需要注意的是当某个线程因发生了未预期的Exception而终止,这时候线程池会补充一个新的线程。 ②. newCachedThreadPool。它将创建一个可缓存的线程池,当线程池的规模大于当前需要处理的任务时会进行回收空闲的线程, 当任务增加时会动态增加线程数, 线程池的规模不受限制。 ③. newSingleThreadExecutor。它将创建单个工作的线程执行任务, 如果线程因Exception而终止会创建一个新的线程补充。它能够确保任务在队列中的顺序串行执行。 ④. newScheduledThreadPool。它将创建一个固定长度的线程池, 并且可以通过定时或延迟的方式执行工作任务。 生命周期: 生命周期包含三个阶段: 运行、关闭、停止。在初始创建时处于运行状态, shutdown方法可以平缓的关闭线程池,过程:不再接受新的任务、等待已经提交的任务执行完毕(包含未开始执行的任务)。shutdownNow是一个比较暴力的方式,过程: 尝试关闭正在执行的任务、拒绝队列中尚未开始执行的任务。