构造方法
ThreadPoolExecutor tpe = new ThreadPoolExecutor(
2, //核心线程数
4, //最大线程数
60, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(4), //线程任务队列
Executors.defaultThreadFactory(), //线程工厂
new ThreadPoolExecutor.CallerRunsPolicy()); //拒绝策略
默认拒绝策略
Abort:抛异常
Discard:扔掉,不抛异常
DiscardOldest: 扔掉排队时间最久的
CallerRuns:调用者处理任务
底层处理
多个线程共享一个任务队列,任务来了先根据ctl解析查询线程池状态解析线程数,调用workerCountOf()查看工作中的线程数,如果比核心线程数小addWorker()执行创建worker执行
如果超过核心线程数则直接进入任务队列等待,继续判断ctl,如果线程不是运行状态 直接执行拒绝策略。
boolean addWorker(Runnable firstTask, boolean core)
firstTask:任务对象
core:是否是核心线程
return:执行是否成功 false执行拒绝策略;