基本工作流程:
当一个任务提交时,如果当前启动的线程数小于核心线程数量,则启动新的线程处理任务,即使其他线程时空闲状态.当大于核心线程数量且小于最大线程数量,并且当队列满了时创建新线程进行处理.
线程池工作线程创建:
工作线程创建使用的ThreadFactory.如果没有特殊定义,使用DefaultThreadFactory工厂进行创建,默认工厂创建的线程有相同的ThreadGroup,非守护型,正常优先级别.可以自定义线程工厂,设置新线程的名字,线程组,守护类型,优先级别.
Keep-alive时间:
线程大于核心线程数量时,当业务减少,空闲超过指定时间后,终止线程.可以通过allowCoreThreadTimeOut参数设置空闲策略引用于核心线程.
三种常用队列:
SynchronousQueue:同步队列,直接传递任务到线程,如果没有线程处理将会失败.一般配置线程最大值无边界.
LinkedBlockingQueue:无边界队列.一般适用于固定线程池大小的实现.因为队列打不到full状态,从而无法创建大于核心线程数量的数量.
ArrayBlockingQueue:有边界队列.
拒绝任务策略:
AbortPolicy:抛出异常
CallerRunsPolicy:调用者自己执行
DiscardPolicy:直接丢弃
DiscardOldestPolicy:丢弃时间最久的
Hook methods:
beforeExecute(Thread, Runnable)
afterExecute(Runnable, Throwable)
再线程执行前后执行,可以用于清理Threadlocal,搜集执行信息等.