首页 > 其他分享 >ScheduledThreadPoolExecutor详解与总结

ScheduledThreadPoolExecutor详解与总结

时间:2022-08-26 16:58:53浏览次数:70  
标签:总结 Runnable ScheduledThreadPoolExecutor long 任务 详解 ThreadPoolExecutor 延迟

ScheduledThreadPoolExecutor详解简介

  • 继承自ThreadPooExecutor,为任务提供延迟或周期执行.
  • 使用专门的ScheduledFutureTask来执行周期任务,也可以接收不需要时间调度的任务.
  • 使用DelayedWorkQueue存储任务.(一种无界延迟队列)
  • 支持线程池关闭后可执行,可选择线程池关闭后支持继续执行周期或延迟任务.
public class ScheduledThreadPoolExecutor 
extends ThreadPoolExecutor implements 
ScheduledExecutorService {}

在源码中可以看到,ScheduledThreadPoolExecutor 的状态管理、入队操作、拒绝操作等都是继承于 ThreadPoolExecutor;ScheduledThreadPoolExecutor 主要是提供了周期任务和延迟任务相关的操作;

schedule(Runnable command, long delay, TimeUnit unit) // 无返回值的延迟任务
schedule(Callable callable, long delay, TimeUnit unit) // 有返回值的延迟任务
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) // 固定频率周期任务
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) // 固定延迟周期任务

ScheduledThreadPoolExecutor的运行逻辑而言,大致可以表述为:

首先将 Runnable/Callable 封装为 ScheduledFutureTask,延迟时间作为比较属性;
然后加入DelayedWorkQueue 队列中,每次取出队首延迟最小的任务,超时等待,然后执行;
最后判断是否为周期任务,然后重新加入DelayedWorkQueue 队列中;

其内部结构如图所示:

这里需要注意的:

ScheduledThreadPoolExecutor 中的队列不能指定,只能是 DelayedWorkQueue;因为他是 无界队列,所以再添加任务的时候线程最多可以增加到 coreSize,这里不清楚的可以查看 ThreadPoolExecutor 详解,就不再重复了;
ScheduledThreadPoolExecutor 重写了 ThreadPoolExecutor 的execute() 方法,其执行的核心方法变成 delayedExecute();

参考博客:

https://blog.csdn.net/cristianoxm/article/details/107640772
https://www.jianshu.com/p/7018d21e4979
https://blog.csdn.net/weixin_43942106/article/details/112261645

标签:总结,Runnable,ScheduledThreadPoolExecutor,long,任务,详解,ThreadPoolExecutor,延迟
From: https://www.cnblogs.com/jelly12345/p/16628088.html

相关文章

  • Kruskal和Prim算法详解
    最小生成树概念(转载)假设一个国家有一些城市,这些城市可以互相连接起来,假设每两个城市之间的道路有很多条,那么一定存在这样的情况,可以用最少的路程连接各个城市。......
  • flutter系列之:构建Widget的上下文环境BuildContext详解
    目录简介BuildContext的本质BuildContext和InheritedWidgetBuildContext的层级关系总结简介我们知道Flutter中有两种Widget,分别是StatelessWidget和StatefulWidget,Statel......
  • Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一。Spring3开......
  • MATLAB R2022a中文版下载及安装教程(图文详解免费版)
    一、下载下载地址:点击下载二、安装激活1、如果安装有旧版本,请先卸载;2、使用WinRAR解压镜像文件,或者win10直接加载,点击“setup.exe”开始安装;3、点击右上角高级选项,选......
  • 链式编程的总结以及在生产环境的应用
    链式编程是将多个操作通过点号"."链接在一起成为一个整体,从而更加的简洁方便。链式编程的原理就是每个操作完成后都会返回一个this对象,也就是返回对象本身!在生产实际环境的......
  • 模板事务的几种写法和总结
    模板事务的好处就不多说了,这里总结几种模板事务的几种写法,直接上代码。transactionTemplate.execute(status->{//2System.out.println("......
  • 【C标准库】详解strerror函数
    创作不易,感谢支持strerror头文件:string.h描述:strerror()函数接受一个参数:errnum,它是一个表示错误代码的整数值。此函数将错误代码转换为说明错误的合适字符串指针并返......
  • 《八股文》MySQL核心问题总结(一)
      作为SQLBoy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分。当然,可能会现场写一些SQL语句,SQ语句可以通过牛客、LeetCode、LintCode之......
  • python内置模块tarfile模块详解:tarfile模块是Python的标准模块之一,能够方便读取tar归
    前言1、通常来说,在工作中我们遇到的最多的压缩文件格式只有5种,如下: xxx.gz 、 xxx.tar 、 xxx.tgz 、 xxx.zip 、 xxx.rar 2、各种压缩文件格式的简介:①gz:......
  • 语法总结
    语法总结1.头文件#include<bits/stdc++.h>//万能头#include<cstdio>//标准输入输出库#include<cmath>//数学库#include<iostream>//输入输出流#include<algorithm>//......