线程池的实现原理
当提交一个新任务到线程池时,线程池的处理流程如下:
1. 线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。
2. 线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程
3. 线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务
Abort 策略(默认) : 丢弃任务 并抛出异常
discard 策略:丢弃任务 但不抛出异常 不建议
CallerunsPolicy 策略 :绕过调用 run 方法 由调用者去执行当前任务