ThreadPoolExecutor 是线程池类。
通俗的讲,它是一个存放一定数量线程的线程集合。线程池允许多个线程同时运行,同时运行的线程数量就是这个线程池的容量,也会有一部分线程出现阻塞,线程池此时也会通过响应的拒绝策略来处理。
如果运行线程数少于 corePoolSize,则 Executor 始终首选添加新的线程,而不进行排队;
如果运行的线程大于等于 corePoolSize,则 Executor 始终首选将请求加入阻塞队列,而不添加新的线程;
如果无法将请求加入队列,则创建新的线程,如果创建此线程超出 maximumPoolSize,在这种情况下,任务将被拒绝;
如果设置的 corePoolSize 和 maximumPoolSize 相同,则创建了固定大小的线程池。如果将 maximumPoolSize 设置为基本的无界值(Integer.MAX_VALUE),则允许池适应任意数量的并发任务,直到内存耗尽。在大都数情况下,核心池大小和最大池大小在创建线程池时设置,不过也可以通过 setCorePoolSize() 和 setMaximumPoolSize() 进行动态更改。
线程池通过 workers 集合来管理多线程,线程启动后,就会执行对应的任务。任务执行完毕后,它会从阻塞队列中取出任务继续执行。阻塞队列负责管理线程池来不及处理的任务,当添加线程池被添加到最大线程池大小时,就会执行拒绝策略(handler),来处理当前提交但被拒绝的任务。
Java多线程系列——线程池原理之 ThreadPoolExecutor
原文:http://www.cnblogs.com/zhengbin/p/7750177.html