【Java 基础】32 定时调度

文章目录

    • Timer 类
      • 创建 Timer
      • 注意事项
    • ScheduledExecutorService 接口
      • 创建 ScheduledExecutorService
      • 注意事项
    • 选择合适的定时调度方式
      • Timer 的适用场景
      • ScheduledExecutorService 的适用场景
    • 总结

在软件开发中,定时任务是一种常见的需求,用于周期性地执行特定的任务或操作。Java 提供了两种主要的定时调度方式: Timer 类和 ScheduledExecutorService 接口。

Timer 类

创建 Timer

Timer 类是 Java 提供的一个简单的定时调度工具。它允许您计划一个任务在未来的某个时刻执行,也可以以固定的时间间隔重复执行。

示例代码:

import java.time.LocalTime;
import java.util.Timer;
import java.util.TimerTask;
public class Demo {public static void main(String[] args) {Timer timer = new Timer();// 创建一个定时任务,延迟 2000 毫秒后开始执行,每隔 5000 毫秒执行一次timer.schedule(new TimerTaskDemo(), 2000, 5000);}
}class TimerTaskDemo extends TimerTask {@Overridepublic void run() {System.out.println("执行任务: " + LocalTime.now());}
}

输出结果:

在这里插入图片描述

注意事项

  • Timer 类在执行任务时是单线程的,如果一个任务的执行时间过长,会影响其他任务的执行。

  • 如果一个任务在执行过程中抛出未捕获的异常,那么 Timer 将终止所有的定时任务。

ScheduledExecutorService 接口

ScheduledExecutorService 是 Java 提供的更强大、灵活的定时调度工具。它基于线程池实现,允许同时执行多个任务,并提供更多的调度选项。

创建 ScheduledExecutorService

示例代码:

import java.time.LocalTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class Demo {public static void main(String[] args) {ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);// 创建一个定时任务,延迟 2 秒后开始执行,每隔 5 秒执行一次executorService.scheduleAtFixedRate(() -> System.out.println("执行任务: " +  LocalTime.now()),2, 5, TimeUnit.SECONDS);}
}

输出结果:

在这里插入图片描述

注意事项

  • ScheduledExecutorService 使用线程池,因此能够更好地处理多个定时任务的并发执行。
  • 它提供了更灵活的调度选项,例如可以设定首次执行的延迟时间,也可以根据上一次任务的执行完成时间来决定下一次任务的开始时间。

选择合适的定时调度方式

Timer 的适用场景

  • 对于简单的定时任务,且任务执行时间短暂的情况,可以选择使用 Timer
  • 适用于单线程执行的场景,不涉及大量的并发任务。

ScheduledExecutorService 的适用场景

  • 适用于复杂的定时任务场景,具有更多的调度选项和更灵活的执行方式。

  • 当需要处理多个定时任务时,ScheduledExecutorService 更适合,因为它基于线程池,能够更好地处理并发任务。

总结

Java 提供了两种主要的定时调度方式:TimerScheduledExecutorService。选择合适的调度方式取决于项目的具体需求。对于简单的定时任务,Timer 可以满足需求。而对于更复杂、更灵活的场景,以及需要处理多个定时任务的情况,推荐使用 ScheduledExecutorService。在实际项目中,根据任务的性质和复杂度,选择合适的定时调度方式是提高系统性能和稳定性的重要因素。

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

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

相关文章

Linux 中的 container_of 原理

源码基于:Linux 5.10 0.前言 container_of() 这个宏函数在Linux 内核中使用的频率还是很多的。网上关于 container_of 使用的优秀文章也很多,之所以笔者也写一篇,一是想更新下最新代码中的使用,二是融入些自己的拙见,…

CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别

时隔一年没写CSDN笔记了,一些CESM的知识点我都快忘了。诶,主要是在国外办公室的网屏蔽了好多国内的网络,CSDN登不上,回家又不想干活。。。好吧,好多借口。。。 昨天师弟问我一些问题,想想要不可以水一篇小…

python安装步骤

1.1 python下载地址 python官网 1.2 详细安装步骤 1.2.1 双击安装包打开,勾选最下边两个方框,然后选择自定义安装,如下图。 1.2.2 这一页默认是全部勾选上的,点击下一步。 1.2.3 修改安装路径,默认是C盘&#xff0c…

CentOS 7 部署 dnsmasq

文章目录 (1)概述(2)dnsmasq的解析流程(3)重要参数说明(4)部署dnsmasq(5)其他内容(6)域名劫持(7)dns污染验证&…

【Git 小妙招】走进 Git 的分支管理(万字图文讲解)

文章目录 前言1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略7.1 一个简单的分支策略(仅参考) 8. bug 分支9. 删除临时分支总结 前言 本文开始介绍 Git 的杀手级功能之⼀:分⽀。本文涉及分⽀创建,切换&#xff0c…

16:00的面试,16:07就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到六月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

选择排序

本题要求从键盘读入n个整数,对这些数做选择排序。输出选择排序每一步的结果和最终结果。 输入格式: 输入的第一行是一个正整数n,表示 在第二行中会有n个整数。 输出格式: 输出选择排序每一步的结果和最终结果。 输入样例: 在这里给出一组输入。例如…

园区网络虚拟化应该这样建

下午好,我的网工朋友。 今天和你聊聊怎么建立园区网络虚拟化。 区别于传统园区关注独立的单台设备,虚拟化网络关注全网的整体业务体验,通过iMaster NCE-Campus和VXLAN技术,实现网络资源能够任意灵活调度。 通过虚拟化技术&…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)

在文章【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型,这10大数据类型可并不是直接在底层通过代码实现的,而是通过不同的底层数据结构组合起来的,这篇我们介绍下Redis常用数据类型…

C++静态成员数据

静态成员数据初始化 #include <iostream> class MyClass { public: static int staticVar; // 声明静态变量 static void staticFunction() { std::cout << "This is a static function." << std::endl; } void regularFunction() { std…

three.js纹理贴图不清晰,颜色失真

一. 贴图不清晰 给渲染器加一些配置选项&#xff1a; // 初始化渲染器let renderer new THREE.WebGLRenderer({antialias: true, //抗锯齿// alpha: true})renderer.setPixelRatio(window.devicePixelRatio) // 设置像素比二. 颜色失真 let texture new THREE.Texture…

CSAPP——linux下的 status 函数及进程退出/进程回收详解

status函数是一个系统调用&#xff0c;用于获取子进程的退出状态。它通常在父进程中使用&#xff0c;以便检查子进程是否正常退出或出现错误。 status函数的原型如下&#xff1a; int waitpid(pid_t pid, int *status, int options); pid参数指定要等待的子进程的进程ID stat…

排序算法——快速排序

快速排序是计算机科学中最著名和广泛使用的排序算法之一。自1960年由英国计算机科学家托尼霍尔&#xff08;Tony Hoare&#xff09;发明以来&#xff0c;它以其高效率和简洁的实现而闻名。在本文中&#xff0c;我们将深入探讨快速排序的工作原理、其优缺点&#xff0c;并提供一…

网络安全这条路,如何打怪升级干掉大Boss?

企业对网络安全的重视是挂在嘴上还是落实在行动中&#xff1f;网络安全人员岗位设置是否合理而有效&#xff1f;网络安全从业者最需要什么样的技能培训&#xff1f;网络安全从业者的职业发展路径应该如何规划&#xff1f;一份“网络安全从业人员现状调查”报告&#xff0c;解你…

解决Hbase报错:ERROR: Can‘t get master address from ZooKeeper; znode data == null

文章目录 问题描述解决方案 问题描述 报错了&#xff1a;这啥公司啊&#xff0c;怎么给的文档怎么错这么多&#xff0c;起一服务&#xff0c;集群里总有几个组件报错 继上次Flume 脚本&#xff0c;使用hdfs sink报错了以后&#xff0c;hbase又报错了&#xff0c;报错提示如下&…

与OA完美契合的开放式低代码平台

随着企业数字化转型的加速&#xff0c;越来越多的企业开始寻求能够快速适应业务需求变化、降低IT成本、提高运营效率的信息系统解决方案。OA作为面向企业日常办公需求的信息系统&#xff0c;在提高企业内部协作效率、优化业务流程、降低运营成本方面具有重要的作用。 它涵盖了…

山西电力市场日前价格预测【2023-12-13】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-13&#xff09;山西电力市场全天平均日前电价为331.79元/MWh。其中&#xff0c;最高日前电价为371.77元/MWh&#xff0c;预计出现在11:15。最低日前电价为280.66元/MWh&#xff0c;预计…

OpenHarmony 如何去除系统锁屏应用

前言 OpenHarmony源码版本&#xff1a;4.0release / 3.2 release 开发板&#xff1a;DAYU / rk3568 一、3.2版本去除锁屏应用 在源码根目录下&#xff1a;productdefine/common/inherit/rich.json 中删除screenlock_mgr组件的编译配置&#xff0c;在rich.json文件中搜索th…

Vue中使用echarts@4.x中国地图及AMap相关API的使用

一、此 demo 实现的基本功能 1.中国地图的显示 2.地图点击下钻的功能 3.地图相关组件的使用&#xff0c;例 tooltip… 二、实现思路 初始使用下载本地的中国 geo 格式的 json 数据来绘制地图&#xff0c;点击某一区划&#xff08;例&#xff1a;山东省&#xff09;时&#xff0…

Android13 不能静态注册的几个广播

Android13 不能静态注册的几个广播 文章目录 Android13 不能静态注册的几个广播一、不能静态注册的广播:二、静态注册无法生效的分析1、Intent.java2、其他地方声明了不能静态注册的广播3、为啥静态注册的广播无效&#xff1f;4、其他静态注册无法生效的广播5、其他Android fra…