线程池的核心参数
ThreadPoolExecutor(int corePoolSize,//核心线程数目int MaximumPoolSize,//最大线程数=核心线程+临时线程long keepAliveTime,//临时线程的存活时间,在存活时间内如果没有新任务,线程资源会被释放TimeUnit unit,//存活时间的时间单位,一个枚举类型BlockingQueue<Runnable> workQueue,//阻塞队列,如果没有空闲的核心线程时(不会直接叫临时线程来处理),就会将新来的任务放入阻塞队列中等待ThreadFactory threadFactory,//定制线程对象的创建,没什么用RejectedExecutionHandler handler//拒绝策略,定义线程都在繁忙且阻塞队列满时对新来任务的处理方式
)
线程池的执行原理
提交任务,
先判断核心线程是否全部繁忙,否->添加到工作线程执行
再判断阻塞队列是否已满,否->添加任务到阻塞队列等待
再判断总线程数是否小于最大线程数,否->创建临时线程执行
(如果核心线程和临时线程空闲时,都会执行阻塞队列里的任务)
按照拒绝策略进行拒绝
拒绝策略
AbortPolicy:直接抛出异常,默认策略
CallerRunsPolicy:用调用者所在的线程(主线程)来执行任务
DiscardOldestPolicy:丢弃阻塞队列最靠前(等待时间最久)的任务来执行当前任务
DiscardPolicy:直接丢弃任务