管理线程的池子,线程池内部维护了若干个线程,没有任务时,所有线程都处于等待状态,如果有任务,线程池就会自动的分配给内部的空闲线程,如果当前没有空闲线程,则任务进入等待状态,进入队列,或者添加一个新线程。
线程池的优点(相比于手工创建,运行线程):
拒绝策略:
AbortPolicy :默认策略(丢弃任务并抛出异常)
DiscardPolicy:丢弃任务,但是不抛出异常
DiscardOldestPolicy:丢弃队列中的末尾任务
CallerRunsPolicy:由原调用线程处理该任务
适合处理CPU密集型的任务,在线程需要长期使用的情况下,使用此线程池可以有效的减少系统消耗。
适合用于并发执行大量短小的任务
适合执行串行的任务,即任务一个一个执行
适合周期性处理线程任务,需要限制线程数量的任务
(1)降低资源的消耗,通过重复利用以创建的线程来避免线程的创建与销毁对系统造成的消耗。
(2) 提高了响应速度,当任务需要执行时,不需要重复创建线程的流程
(3)提高线程的可管理性,线程是稀缺资源,要避免无限制的创建,否则会造成系统资源浪费,还会降低系统的稳定性。还可以自己统一配置核心参数,开发效率有一定的提高。
用数组实现的有界堵塞队列,按FIFO排序
基于链表结构的阻塞队列,按FIFO排序,容量可进行选择设置,如果不设置,默认为Integer_MAX_VALUE,吞吐量高于ArrayBlockingQueue(在newFixedThreadPool线程池中有用到)
任务定时周期的延迟执行的队列,根据指定的时间从大到小排列,否则根据插入队列的先后排序(newSchdutedThreadPool线程池中用到 )
具有优先级的无界阻塞队列
不储存元素的阻塞队列,每一个插入操作都必须等另一个调用移除操作之后,否则插入操作会一直处于阻塞状态。
线程池有这几个状态:RUNNING, SHUTDOWN, STOP, TEDYING, TERMINTED
该状态下,线程会接受新任务,并处理阻塞队列中的任务。
(2)SHUTDOWN
该状态下,线程不会处理新任务,但会处理阻塞队列中的任务。
(3)STOP
该状态下,线程不会处理新任务,也不会处理阻塞队列的任务,而且会中断正在执行的任务。
(4)TEDYING
该状态表明所有的任务运行终止,而且记录的任务数量为零
(5)TERMINTED
该状态表明线程彻底终止。