有自己的拒绝策略,当任务队列满了,线程数也达到最大的时候,需要拒绝提交的任务 。
线程池参数介绍
【自己动手写线程池——向JDK线程池进发】 private AtomicInteger ct = new AtomicInteger(0); // 当前在执行任务的线程个数 private int corePoolSize; private int maximumPoolSize; private long keepAliveTime; private TimeUnit unit; private BlockingQueue<Runnable> taskQueue; private RejectPolicy policy; private ArrayList<Worker> workers = new ArrayList<>(); private volatile boolean isStopped; private boolean useTimed;参数解释如下:
- ct:表示当前线程池当中线程的个数 。
- corePoolSize:线程池当中核心线程的个数,意义和上面谈到的JDK的线程池意义一致 。
- maximumPoolSize:线程池当中最大的线程个数,意义和上面谈到的JDK的线程池意义一致 。
- keepAliveTime 和 unit:和JDK线程池的参数意义一致 。
- taskQueue:任务队列,用不保存提交的任务 。
- policy:拒绝策略,主要有一下四种策略:
public enum RejectPolicy { ABORT, CALLER_RUN, DISCARD_OLDEST, DISCARD}
- workers:用于保存工作线程 。
- isStopped:线程池是否被关闭了 。
- useTimed:主要是用于表示是否使用上面的 keepAliveTime 和 unit,如果使用就是在一定的时间内,如果没有从任务队列当中获取到任务,线程就从线程池退出,但是需要保证线程池当中最小的线程个数不小于 corePoolSize。
实现Runnable // 下面这个方法是向线程池提交任务 public void execute(Runnable runnable) throws InterruptedException { checkPoolState(); if (addWorker(runnable, false) // 如果能够加入新的线程执行任务 加入成功就直接返回 || !taskQueue.offer(runnable) // 如果 taskQueue.offer(runnable) 返回 false 说明提交任务失败 任务队列已经满了 || addWorker(runnable, true)) // 使用能够使用的最大的线程数 (maximumPoolSize) 看是否能够产生新的线程 return; // 如果任务队列满了而且不能够加入新的线程 则拒绝这个任务 if (!taskQueue.offer(runnable)) reject(runnable); }在上面的代码当中:
- checkPoolState函数是检查线程池的状态,当线程池被停下来之后就不能够在提交任务:
private void checkPoolState() { if (isStopped) { // 如果线程池已经停下来了,就不在向任务队列当中提交任务了 throw new RuntimeException("thread pool has been stopped, so quit submitting task"); } }
- addWorker函数是往线程池当中提交任务并且产生一个线程,并且这个线程执行的第一个任务就是传递的参数 。max表示线程的最大数目,max == true 的时候表示使用 maximumPoolSize 否则使用 corePoolSize,当返回值等于 true 的时候表示执行成功,否则表示执行失败 。
经验总结扩展阅读
-
2022年农历腊月初九搬新家吉日 2022年12月31日搬新家好不好
-
葡萄干配一物,每天喝一杯,不贫血了,眼睛亮了,女人常喝不显老
-
-
2022年农历九月十六修坟吉日 2022年10月11日适合修坟吗
-
热水器不出热水怎么回事,电热水器不出热水怎么回事?
-
总有人在问 太多婚后的真爱,不过只是一时的激情,根本就当不得真
-
-
怎么开心怎么过 致35岁的女人:往后你要怎么开心怎么过
-
喝不完的奶粉可以放到下次喝吗,喝剩的奶粉可以下顿喝吗
-
-
8月底,痛定思痛,爱恨清空,展望未来,高傲离去,真爱就在眼前
-
-
-
涂抹 “一款三用”的平价口红,不挑肤色巨显白,素颜涂也能彰显高级感
-
相思梧叶影视情感说|《北辙南辕》:中年夫妻应该如何经营婚姻?不妨学学杜世均和司梦
-
-
-
-
-
因为走丢了的哈士奇被送进了派出所,结果把派出所拆了,不愧为拆家王