呀儿哟,看个定时线程池,尽然挖出这么多宝藏(一)

前序:

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.它方之石,可以攻玉

聊聊对账系统的设计方案

转载链接:https://mp.weixin.qq.com/s?__biz=MzIzMTgwODgyMw==&mid=2247483901&idx=1&sn=ff92ae8f0c1a2627454ddcefad573e90&chksm=e89fcba5dfe842b3886f1df6b42b7fe1a9e97b14dc9f41b3f6ec2b6bfbd7dc1f81c94037a2e7&scene=21#wechat_redirect

 

 

正文(终于到这一步了)

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进行排序

 

posted @ 2020-10-06 12:15  powerZhangFly  阅读(155)  评论(1)    收藏  举报