0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

java实现定时器的四种方式

工程师邓生 来源:未知 作者:刘芹 2023-10-18 17:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

java实现定时器的四种方式

1. 使用Thread.sleep()方法

Thread.sleep()方法可以让当前线程暂停执行一段时间,我们可以利用它来实现简单的定时器。

示例代码:

```java
public class TimerDemo1 {
public static void main(String[] args) throws InterruptedException {
int count = 0;
while (true) {
System.out.println("定时器已经运行了 " + (++count) + " 秒");
Thread.sleep(1000); // 暂停1000毫秒,即1秒
}
}
}
```

该示例中我们使用了一个无限循环,每次循环输出当前运行的时间,并暂停1秒钟后再继续。

优点:实现简单,易于理解。

缺点:无法在定时器运行过程中修改定时器的时间或停止定时器,不适合实现复杂的定时器逻辑。

2. 使用Timer类

Timer类是Java提供的一个简单的定时器工具,可以轻松实现定时器的开启、停止、暂停等操作。

示例代码:

```java
import java.util.Timer;
import java.util.TimerTask;

public class TimerDemo2 {
public static void main(String[] args) throws InterruptedException {
Timer timer = new Timer();
int count = 0;
timer.schedule(new TimerTask() {
public void run() {
System.out.println("定时器已经运行了 " + (++count) + " 秒");
}
}, 1000, 1000);
Thread.sleep(5000);
timer.cancel();
}
}
```

该示例中我们使用了Timer类实现定时器的功能,使用timer.schedule()方法开启定时器,可以设定初始延迟时间、定时器间隔时间,并通过timer.cancel()方法停止定时器。

优点:使用方便,适合实现一些简单的定时任务。

缺点:无法在定时器运行过程中修改定时器的时间或停止定时器,不支持并发操作。

3. 使用ScheduledExecutorService类

ScheduledExecutorService类是Java提供的用于定时执行任务的工具类,可以设定定时器的初始延迟时间、间隔时间、并发量等参数,支持更加灵活的定时器条件设定和停止。

示例代码:

```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class TimerDemo3 {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); // 开启一个线程池
int count = 0;
executor.scheduleAtFixedRate(() -> System.out.println("定时器已经运行了 " + (++count) + " 秒"), 1, 1, TimeUnit.SECONDS);
Thread.sleep(5000);
executor.shutdownNow();
}
}
```

该示例中我们使用了ScheduledExecutorService类实现定时器的功能,在executor.scheduleAtFixedRate()方法中设定了初始延迟时间、定时器间隔时间,并通过executor.shutdownNow()方法停止定时器。

优点:灵活且方便,支持并发操作,适合实现一些复杂的定时任务。

缺点:算法略有复杂,需要一定的背景知识。

4. 使用Quartz类

Quartz是Java中一个强大的定时器框架,支持各种复杂的计划和时间设定,适用于大型项目中的复杂定时任务。

示例代码:

```java
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.CronScheduleBuilder.cronSchedule;

public class TimerDemo4 {
public static void main(String[] args) throws SchedulerException, InterruptedException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 获取调度器
scheduler.start();
Job myJob = new Job() { // 自定义任务
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("调度器运行中...");
}
};
scheduler.scheduleJob(
newJob(myJob.getClass()) // 设置任务
.withIdentity("myJob", "group1")
.build(),
newTrigger()
.withIdentity("myJobTrigger", "group1")
.withSchedule(
simpleSchedule() // 不重复执行
.withIntervalInSeconds(1)
.withRepeatCount(0)
)
.build()
);
Thread.sleep(5000);
scheduler.shutdown();
}
}
```

该示例中我们使用了Quartz框架实现定时器,创建一个自定义的任务,并调度它的执行。我们可以通过修改Trigger实现更加复杂的时间调度设定。

优点:可以实现各种复杂的计划和时间设定,适用于大型项目中的复杂定时任务。

缺点:相对于其他方案来说,Quartz的学习和上手成本比较高。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3015

    浏览量

    117024
  • 定时器
    +关注

    关注

    23

    文章

    3378

    浏览量

    125074
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    驱动之路#24:Linux设备四种读写模型

    Linux 设备四种读写模型——其实核心就 4 方式:查询、休眠 - 唤醒、poll、异步通知。它们不是中断本身,而是 “应用 - 驱动” 的上层交互逻辑(中断是底层硬件触发机制),但高效交互几乎都依赖中断
    的头像 发表于 05-06 16:26 5038次阅读

    瑞萨RA系列FSP库开发实战指南之AGT低功耗定时器简介和结构框图

    瑞萨RA MCU有两定时器外设:GPT(General PWM Timer)定时器和AGT(Asynchronous General Purpose Timer)定时器
    的头像 发表于 04-30 16:47 7555次阅读
    瑞萨RA系列FSP库开发实战指南之AGT低功耗<b class='flag-5'>定时器</b>简介和结构框图

    深入剖析NE555定时器:特性、参数与应用

    ,我们就来深入了解一下NE555定时器的相关特性、参数以及典型应用。 文件下载: NE555M/TR.pdf 产品简介 NE555定时器内部由阈值比较、触发比较、RS触发
    的头像 发表于 04-28 15:40 210次阅读

    变频四种制动方式

    解决的核心问题。目前主流的变频制动方式主要包括能耗制动、回馈制动、直流制动和电容制动四种,每种方式各具特点,适用于不同的工况场景。
    的头像 发表于 03-25 16:31 344次阅读

    LM555QML定时器:功能特性、应用及设计要点

    了解一下它。 文件下载: lm555qml.pdf 一、LM555QML简介 LM555QML是一款可直接替代SE555/NE555的定时器,能实现从微秒到数小时的定时,支持单稳态和无稳态两
    的头像 发表于 02-10 15:40 434次阅读

    是德示波器DSOX1202A与电脑的四种连接方式及操作步骤详解

    是德科技(Keysight)DSOX1202A示波器作为高精度电子测量设备,广泛应用于电子工程、通信测试与自动化调试场景。为实现数据实时采集、波形分析与远程控制,用户需通过USB、LAN、GPIB或串口将示波器与电脑互联。本文将结合官方指南与实操经验,系统介绍四种连接
    的头像 发表于 01-13 17:48 2014次阅读
    是德示波器DSOX1202A与电脑的<b class='flag-5'>四种</b>连接<b class='flag-5'>方式</b>及操作步骤详解

    LAT1173高精度定时器的同步功能应用笔记

    STM32G474 所含的高精度定时器(HRTIMER)其实包含了多个定时器,多个定时器之间可以单独工作,也可以进行同步,且高精度定时器还能与片上的其他
    发表于 01-11 17:32 0次下载

    LAT1183+高精度定时器中 single-shot 计数模式不工作应用笔记

    客户使用 STM32G474 的高精度定时器,基于 CubeMX 进行外设配置与代码生成,将某个子定时器的计数方式设置为 retriggerable single shot 方式,发现
    发表于 01-11 17:28 0次下载

    DS100DF410:低功耗10GbE通道重定时器的深度解析

    DS100DF410:低功耗10GbE通道重定时器的深度解析 在高速数据传输的领域中,重定时器扮演着至关重要的角色,它能够有效改善信号质量,确保数据的可靠传输。今天,我们就来深入探讨一款优秀
    的头像 发表于 12-24 09:15 644次阅读

    深入剖析DS125RT410低功耗多速率通道重定时器

    链路中的数据传输问题提供了有效的解决方案。今天,我就来和大家详细探讨一下这款芯片。 文件下载: ds125rt410.pdf 芯片概述及特性亮点 基础信息与设计目标 DS125RT410是一款集成了信号调理功能的通道重定时器,旨在实现
    的头像 发表于 12-23 13:55 836次阅读

    实现一个嵌入式的软件定时器

    ,一般可分为两:数组结构和链表结构。什么意思呢?这是(多个)软件定时器在内存中的存储方式,可以用数组来存,也可以用链表来存。 两者的优劣之分就是两种数据结构的特性之分:数组方式
    发表于 12-10 08:29

    CW32L0开发板学习记录,高级定时器ATIM学习

    通道,可以测量输入信号的脉冲宽度(输入捕获)或者产生输出波形(输出比较和 PWM)。 低功耗定时器(LPTIM): 内部集成1个 16 位低功耗定时器(LPTIM),可以以很低的功耗实现定时
    发表于 12-01 07:35

    PWM、定时器、SysTick 区别及应用场景

    。下面我们来梳理清楚。一、基本概念定时器(Timer)MCU内最基础的计数外设,通过计数时钟周期实现定时、计数功能。多数MCU内部有多个通用定时器,可配置为
    的头像 发表于 11-17 10:53 861次阅读
    PWM、<b class='flag-5'>定时器</b>、SysTick 区别及应用场景

    SysTick系统滴答定时器简介

    SysTick—系统定时器是属于CM33内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数,计数每计数一次的时间为 1/SYSCLK,一般我们设置系统时
    的头像 发表于 09-23 09:50 1905次阅读
    SysTick系统滴答<b class='flag-5'>定时器</b>简介

    大彩讲堂:VisualHMI-LUA教程-定时器的使用指南

    定时器的使用
    的头像 发表于 08-31 16:59 1498次阅读
    大彩讲堂:VisualHMI-LUA教程-<b class='flag-5'>定时器</b>的使用指南