呀儿哟,看个定时线程池,尽然挖出这么多宝藏(一)
前序:
1.如果你不懂线程池,看这个
漫画:怎么给女朋友讲明白线程池?
转载链接:https://blog.csdn.net/csdnsevenn/article/details/90761623

2.如果有了解但是没用过,看这个
高级面试题总结—线程池还能这么玩?
转载链接:https://mp.weixin.qq.com/s/2sY9jU6Z3Y59NWqfF8ffkg
3.如果只写过demo但是不知道什么场景用,看这个
巧用线程池
转载链接:https://mp.weixin.qq.com/s/jc7sqy52QSBWJbQAruyWfw
4.如果想知道线程运行的第一人称视角,看这个
一个故事帮你理解线程和线程池(博主小声提示:有点长)
转载链接:https://www.cnblogs.com/lisingshen/p/7499760.html

5.如果你常用线程池,下面的坑你或许经历过
血的教训,如何正确使用线程池 submit 和 execute 方法
转载链接:https://mp.weixin.qq.com/s/IXiBcdryaHq7MGsN-cQHlw
没想到,这么简单的线程池用法,深藏这么多坑
转载链接:https://mp.weixin.qq.com/s/QFCI3759-jFXdG10SmZZJQ
6.上面都看完了吗?哈哈,考你一下
面试官:线程池如何按照 core、max、queue 的执行循序去执行?
转载链接:https://mp.weixin.qq.com/s/ngjqD9V0cLCdsfgZ7KaCDA
7.它方之石,可以攻玉
聊聊对账系统的设计方案

正文(终于到这一步了)
ScheduledThreadPoolExecutor它用来处理延时任务或定时任务。
它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三 种提交任务的方式:
1. schedule
2. scheduledAtFixedRate
3. scheduledWithFixedDelay
SchduledFutureTask接收的参数(成员变量):
1. private long time:任务开始的时间
2. private final long sequenceNumber;:任务的序号
3. private final long period:任务执行的时间间隔
它采用DelayQueue存储等待的任务
1. DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序,若 time相同则根据sequenceNumber排序;
2. DelayQueue也是一个无界队列;
工作线程的执行过程:
工作线程会从DelayQueue取已经到期的任务去执行;
执行结束后重新设置任务的到期时间,再次放回DelayQueue
ScheduledThreadPoolExecutor会把待执行的任务放到工作队列 DelayQueue中,DelayQueue封装了一个PriorityQueue,PriorityQueue会对 队列中的ScheduledFutureTask进行排序

浙公网安备 33010602011771号