ScheduledThreadPoolExecutor详解
来源:互联网 发布:硬笔书法字帖推荐 知乎 编辑:程序博客网 时间:2024/05/18 03:02
ScheduledThreadPoolExecutor与Timer类似,Timer对应的是单个后台线程,而ScheduledThreadPoolExecutor可以在构造函数中指定多个对应的后台线程数
ScheduledThreadPoolExecutor会把待调度的任务(ScheduledFutureTask)放到一个DelayQueue中。
执行任务步骤:
1.线程1从DelayQueue中获取已到期的ScheduledFutureTask(DelayQueue.take())。
2.线程1执行这个ScheduledFutureTask
3.线程1修改ScheduledFutureTask的time变量为下次将要被执行的时间
4.线程1把这个修改time之后的ScheduledFutureTask放回
DelayQueue中DelayQueue封装了一个PriorityQueue,这个PriorityQueue会对队列中的ScheduledFutureTask进行排序
获取任务步骤:
1.获取Lock
2.获取周期任务:
2.1如果PriorityQueue为空,当前线程到Condition中等待;否则执行2.2
2.2如果PriorityQueue的头元素的time时间比当前时间大,到Condition中等待到time时间;否则执行2.3
2.3获取PriorityQueue的头元素;如果PriorityQueue不为空,则唤醒在Condition中等待的所有线程
3.释放Lock
添加任务步骤:
1.获取Lock2.添加任务:
2.1向PriorityQueue添加任务
2.2如果在2.1中添加的任务是PriorityQueue的头元素,唤醒在Condition中等待的所有线程
3.释放Lock
- ScheduledThreadPoolExecutor详解
- ScheduledThreadPoolExecutor详解
- 详解ThreadPoolExecutor与ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- ScheduledThreadPoolExecutor
- 线程中的ScheduledThreadPoolExecutor的scheduleAtFixedRate方法详解
- 定时任务ScheduledThreadPoolExecutor的使用详解
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- iOS RunLoop 的个人理解
- prompt 消息对话框
- HTML 鼠标放上显示悬浮窗口
- MTK online
- 最大堆排序
- ScheduledThreadPoolExecutor详解
- Redis源码剖析和注释(二十一)--- 单机服务器实现
- Unity Shader-死亡溶解效果
- Police Stations
- 手动用注册表新建自定义后缀名的文件
- POJ-3070 Fibonacci(矩阵快速幂)
- 用for in实现js的反射
- 我来了
- 头文件里面有什么,头文件的作用:大大提高了程序的编写效率!尤其再多文件效率提高中更为突出!