【Java 基础】32 定时调度

news2024/11/27 8:11:49

文章目录

    • 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 {
    @Override
    public 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.coloradmin.cn/o/1307059.html

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

相关文章

了解振弦采集仪:工程质量控制的得力助手

了解振弦采集仪:工程质量控制的得力助手 振弦采集仪是一种专门用于工程质量控制的仪器设备,它可以帮助工程师监测和评估结构物的振动性能。它的工作原理是通过将传感器固定在结构物上的振弦上,然后测量振弦的振动频率、振动幅度等参数&#…

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀

GPTs prompts灵感库:创意无限,专业级创作指南,打造吸睛之作的秘诀 优质prompt展示 1.1 极简翻译 中英文转换 你是一个极简翻译工具,请在对话中遵循以下规则: - Prohibit repeating or paraphrasing any user instru…

mysql更新某个字段=这个字段+字符串

当我们像c#中用拼接执行sql语句时,如下: UPDATE abpusers set UserNameqyUserName where UserNameqy-wh 会出现以下错误: 在mysql中通过concat函数来实现 UPDATE abpusers set UserNameCONCAT(qy_,UserName) where UserNameqy-wh

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后,与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…

PP材料粘接ABS材料使用UV胶的好处?

跟随着现阶段材料的不断发展更迭,PP材料应用越来越广,生产效率要求越来越高,为了加快生产,提高效率,PP材料的粘接上使用UV胶粘接PP(聚丙烯)和ABS(丙烯腈-丁二烯-苯乙烯共聚物&#x…

AI日报:人工智能与新材料的发现

文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

【Zerotier】自建PLANET服务器内网地址连接

之前已经完成了【Zerotier】通过docker自建PLANET服务器,但是遇到一个问题,因为各种原因,内网里面的ZeroTier Client无法通过PLANET服务器的公网地址连接,愁怀了这下。在经过多方测试验证后,可以采取重新生成一个PLANE…

MYSQL练题笔记-子查询-电影评分

一、题目相关内容 1)相关的表 2)题目 3)帮助理解题目的示例,提供返回结果的格式 二、自己初步的理解 1.字典序是指从前到后比较两个字符串大小的方法。 首先比较第1个字符,如果不同则第1个字符较小的字符串更小&…

Linux install manual 1Panel

前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括: 快速建站:深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定;高效管理:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;安全可…

CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站

WordPress是使用PHP语言开发的博客平台,在支持PHP和MySQL数据库的服务器上,您可以用WordPress架设自己的网站,也可以用作内容管理系统(CMS)。本教程介绍如何在CentOS 7.x操作系统的ECS实例上搭建WordPress网站。 背景…

指针浅谈(四)

在指针浅谈(三)中http://t.csdnimg.cn/wYgJG我们知道了数组名是什么,任何用指针访问数组,一维数组传参的本质是什么,这一次我们来学习二级指针,指针数组,以及如何用指针数组模拟二维数组。 1.二级指针 指针变量也是变…

数据爬虫:获取申万一级行业数据

目录 1. 获取访问接口 2. 链接网址 3. 链接名单 免责声明:本文由作者参考相关资料,并结合自身实践和思考独立完成,对全文内容的准确性、完整性或可靠性不作任何保证。同时,文中提及的数据仅作为举例使用,不构成推荐…

1-4、JDK目录结构

语雀原文链接 文章目录 1、目录结构2、JDK中rt.jar、tools.jar和dt.jar作用3、bin目录部分说明(基本工具) 1、目录结构 bin目录:包含一些用于开发Java程序的工具,例如:编译工具(javac.exe)、运行工具 (java.exe) 、打…

[Python进阶] 消息框、弹窗:批处理消息框\msg

5.20 消息框、弹窗:批处理消息框\msg 批处理中的MSG命令是一个用于向用户发送消息的命令。它可以用来在批处理脚本中向指定的用户发送消息。 命令格式为MSG {username | sessionname | sessionid | filename | *}[/SERVER:servername] [/TIME:seconds] [/V] [/W] […

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

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

MAX/MSP SDK学习09:重要示例1

本示例涉及到单个MSP对象同时使用Signal类型、Message类型的入口;代理入口的使用。 注意:MSP对象的入口默认为代理入口,因此Signal类型、Message类型的数据都可接收; #include "ext.h" #include "ext_obex.h&…

如何应对网站的Canvas等高级指纹和MAC地址检测?

随着互联网技术的发展,网站和应用程序采用了越来越多的高级指纹和MAC地址检测技术来追踪用户和识别其身份。其中,Canvas指纹是一种常见的高级指纹检测技术,而MAC地址是设备的唯一标识符。在本文中,我们将了解Canvas指纹和MAC地址的…

C/C++常见面试知识总结(三)

C语言是一种通用计算机(高级)编程语言;面向过程;广泛应用于计算机系统设计以及应用程序编写;设计目标,是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行…

快速解决Edge浏览器常见问题:完整教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、Edge浏览器是什么? 二、常见的问题 1. DNS服务器出错 解决方案一:清除浏览器缓存和Cookie 2.网络问题 3.缓存和Cook…