详解scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别

news/2025/9/21 10:58:13/文章来源:https://www.cnblogs.com/xiondun/p/19103289

scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始下次任务
而scheduleWithFixedDelay 是不管任务执行多久,都会等上一次任务执行完毕后再延迟delay后去执行下次任务
不多bb,直接上来代码来瞅瞅。。。

1、 scheduleAtFixedRate,任务执行时间小于period时
public static void circleScheduleTask() {ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);executorService.scheduleAtFixedRate(new Runnable() {private int count = 0;private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");@Overridepublic void run() {String time = simpleDateFormat.format(new Date());System.out.println(time + " >>第"+ (++count) + "次执行定时任务.");}}, 0, 2000, TimeUnit.MILLISECONDS);
}
AI写代码java运行123456789101112

结果:可以看到上次任务完成后,间隔2s执行下次任务

00:16:45 >>第1次执行定时任务.
00:16:47 >>第2次执行定时任务.
00:16:49 >>第3次执行定时任务.
00:16:51 >>第4次执行定时任务.
00:16:53 >>第5次执行定时任务.
AI写代码java运行12345
2、scheduleAtFixedRate,任务执行时间大于period时
public static void circleScheduleTask() {ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);executorService.scheduleAtFixedRate(new Runnable() {private int count = 0;private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");@Overridepublic void run() {String time = simpleDateFormat.format(new Date());System.out.println(time + " >>第"+ (++count) + "次执行定时任务.");try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}}, 0, 2000, TimeUnit.MILLISECONDS);
}
AI写代码java运行1234567891011121314151617

结果:可以看到,上次任务执行了3s结束后,立马执行下次任务

00:21:18 >>第1次执行定时任务.
00:21:21 >>第2次执行定时任务.
00:21:24 >>第3次执行定时任务.
00:21:27 >>第4次执行定时任务.
AI写代码java运行1234
3、scheduleWithFixedDelay,任务执行时间大于delay
public static void circleScheduleTask() {ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);executorService.scheduleWithFixedDelay(new Runnable() {private int count = 0;private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");@Overridepublic void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}String time = simpleDateFormat.format(new Date());System.out.println(time + " >>第"+ (++count) + "次执行定时任务.");}}, 0, 2000, TimeUnit.MILLISECONDS);
}AI写代码java运行123456789101112131415161718

结果:可以看到,上次任务执行3s完成后,延迟了2 s后才执行的下次任务
这个和2就有了明显的区别了

00:24:28 >>第1次执行定时任务.
00:24:33 >>第2次执行定时任务.
00:24:38 >>第3次执行定时任务.
00:24:43 >>第4次执行定时任务.
AI写代码java运行1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟输入的过程

模拟输入的过程一、ADC 是什么? ADC 的全称是 Analog-to-Digital Converter,中文叫模数转换器。 它的作用就像一位翻译官,负责将现实世界中连续的模拟信号“翻译”成计算机(MCU)能够理解和处理的离散的数字信号。…

基于Redisson和自定义注解的分布式锁实现策略

要实现基于Redisson和自定义注解的分布式锁策略,我们需首先理解Redisson。Redisson是一个基于Redis的高级Java对象映射库,其内部封装了分布式数据结构和同步服务,使得在分布式环境中操作Redis变得非常方便。 以下是…

CCPC2025网络赛 游记

队友超快砍完签到,我全场挂机没作用,3t寄了。省流 队友超快砍完签到,我全场挂机没作用,3t寄了。9.20 内含剧透,请vp后再来。 赛前 比赛开始前登录机器,发现我点不进去比赛页面,一顿查询之后发现队长机是叶神,不…

深入解析:Python进阶第三方库之Numpy

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

17.生成器和推导式 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

知行合一

都说,人赚不到认知之外的钱,这句话是真理。这些年,做生意创业的过程中,也发现了一个法则——寒门的孩子想改命,只有一条路,叫改脑,升认知。当我见到一个人时,只需要了解一下,他当下每天时间用在哪里,在跟谁在…

Manim实现水波纹特效

本文将介绍如何使用ManimCE框架实现一个水波纹特效,让你的数学动画更加生动有趣。 1. 实现原理 水波纹特效通过WaterRipple类实现,这是一个自定义的Animation子类。让我们从代码角度来分析其实现原理: 1.1. 核心数据…

CSP 2025 S1 游记

CSP 2025 S1 游记想到这可能是我最后一个赛季打 OI ,还是留下点东西记录 暑假 由于没有认真考虑过考不上XJ本部的情况,所以没有三连签,之后填的是杭高、学紫。结果tmd连杭高都没上,遂至学紫。学校举办了十天“夏令…

深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”

深入解析:解锁AI智能体:上下文工程如何成为架构落地的“魔法钥匙”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

JS之使用for...of赋值失败的原因分析

原代码为for (let tab of tabList.value) {const subFormData = subOrderListMap.value[tab.subFormWebUuid];debuggerif (subFormData) {tab.formStatus = "已完成";tab = { ...subFormData, ...tab };} }这…

Linux /lib/modules/$(uname -r)/ 目录功能作用详解

Linux /lib/modules/$(uname -r)/ 目录功能作用详解Linux 系统中的 /lib/modules/$(uname -r)/目录非常重要,它承载着与当前运行内核版本严格对应的​​内核模块​​及其相关的管理文件。理解这个目录,对你高效管理…

《建筑的永恒之道》第 27 章:道之核心

从你至此所读列的看起来,仿佛建筑的生活以及它们充满生气时所具有的永恒特征可以简单地靠使用模式语言来创造。若是人们有了一种有活力的语言,仿佛其建筑行为所产生的东西都将是有生气的,仿佛城市的生活可以简单地靠…

软件工程第二次作业_个人项目

Github连接: Ender39831/3123004694: homework ](https://github.com/Ender39831/3123004694)这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience这个作业要求在哪里 https://e…

Linux命令大全(档案管理)

Linux命令大全(档案管理)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

小狼毫雾凇拼音安装部署

I. 资源链接 小狼毫官网:RIME | 中州韻輸入法引擎 雾凇拼音仓库:iDvel/rime-ice

Chapter 3 Resize and Cropping

img = cv2.imread(images/lambo.png) # (462, 623, 3) print(img.shape)# 先是width(x轴),然后是height(y轴),可以看出 resize 是放大或缩小并不是裁剪 imgResized = cv2.resize(img, (300, 200)) # 这里是He…

详细介绍:java中常见的几种排序算法

详细介绍:java中常见的几种排序算法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

Linux 内核VRF

Linux 内核VRFVirtual Routing and Forwarding (VRF) 由路由表+网络设备组成。 加载vrf内核模块 modprobe vrf 基本操作 # 创建并拉起vrf设备 # 自动创建路由表1 ip link add vrf1 type vrf table 1 ip link set dev v…

使用FFmpeg转换m4a

在Linux下可以使用FFmpeg将m4a文件转换为mp3文件,如下 ffmpeg -i input.m4a -vn -acodec libmp3lame -ab 320k output.mp3其中-i 是输入文件 -vn 是不包括视频 -acodec libmp3lame 是指定 LAME MP3 解编码器 -ab 320k…

提升多屏监控体验/新增辅屏预览功能/轻松实现跨屏实时监控/支持高达500路多个屏幕同时显示

一、前言说明 随着监控系统规模的不断扩大,以及用户对多屏协同操作需求的日益增长,如何高效、灵活地预览大量实时视频通道,成为提升用户体验的关键。尤其是在拥有多个显示器的环境中,用户越来越希望能够在不同屏幕…