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
    +关注

    关注

    19

    文章

    2961

    浏览量

    104607
  • 定时器
    +关注

    关注

    23

    文章

    3242

    浏览量

    114604
收藏 人收藏

    评论

    相关推荐

    变流电路的换流方式有哪四种

    变流电路是一将一形式的电能转换为另一形式的电能的电路,广泛应用于电力电子领域。在变流电路中,换流方式实现电能转换的关键技术之一。换流
    的头像 发表于 08-14 11:08 1999次阅读

    定时器的工作方式介绍

    定时器是计算机和嵌入式系统中常见的一硬件模块,用于实现定时和计数功能。定时器的工作方式通常由一
    的头像 发表于 07-12 10:29 790次阅读

    定时器相关的寄存有哪些类型

    在微控制编程中,定时器是一非常常见的功能模块,用于实现各种定时和计数功能。定时器的工作原理是
    的头像 发表于 07-12 10:25 841次阅读

    元器件的包装方式及常见的四种方式

    四种元件包装方式在实际生产和使用中广泛应用,不同的包装方式适用于不同类型和规格的元件,并且可以根据具体要求进行定制化的包装设计。不同的包装方式也可以影响元件的存储、运输和使用,选择适合
    的头像 发表于 06-27 12:58 1444次阅读

    如何实现一个软件定时器

    在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断到,就对一个全局的时间
    的头像 发表于 04-29 11:00 611次阅读

    s7200定时器的五故障介绍

    定时器或CPU故障:如果定时器本身或PLC的CPU出现故障,也可能导致定时器无法复位。此时,需要检查定时器和CPU的工作状态,确保其正常运行。
    的头像 发表于 04-03 17:08 2280次阅读

    请问TIM高级定时器空闲极性OIS OISN设置的意义是什么?

    定时器的CCP和CCNP是不是00 01 10 11四种配置情况都可能有呢?OIS和OISN是不是00 01 10 11四种配置情况都可能有呢?一般怎么应用呢
    发表于 04-01 06:59

    使用555定时器的可调双定时器电路

    定时器 IC 555 是最通用和最常用的 IC 之一,因为它的应用范围更广,如 PWM放大器、延迟定时器、开关电路、占空比选择、时钟脉冲发生等。这也可用于各种应用,如精确
    的头像 发表于 02-25 15:16 2081次阅读
    使用555<b class='flag-5'>定时器</b>的可调双<b class='flag-5'>定时器</b>电路

    定时器原理能控制马达吗为什么

    定时器原理可以用于控制马达。马达是一将电能转换为机械能的设备,通常由电动机和传动装置组成。定时器是一电子设备,用来生成和计时精确而稳定的时间信号。通过将
    的头像 发表于 01-23 15:21 628次阅读

    555定时器的基本功能 555定时器的工作原理及其应用

    定时器有三基本工作模式,分别是单稳态、自由运放和双稳态。它可以在多种电子电路中实现功能的实现。下面将详细介绍它们的功能特点。 单稳态模式:在单稳态模式下,555
    的头像 发表于 01-18 11:12 1.4w次阅读

    51单片机定时器定时1秒程序流水灯结果分析

    流水灯的设计原理、实现步骤和结果分析。 一、设计原理 在51单片机中,定时器常用的工作方式有两定时器模式和计数
    的头像 发表于 12-26 14:57 6843次阅读

    定时器会阻塞线程吗 定时器指令有哪几种

    定时器会阻塞线程吗 定时器指令有哪几种  定时器一般不会阻塞线程,但具体是否会阻塞取决于所使用的定时器实现
    的头像 发表于 12-19 14:03 910次阅读

    四种霍尔元件的感应方式分别是什么呢?

    和顺磁元件。以下将详细介绍这四种霍尔元件的感应方式。 一、线性霍尔元件 线性霍尔元件是最常见的一霍尔元件,也被称为磁敏电阻。它是通过外加电压和磁场之间的相互作用来感应电流变化的。当
    的头像 发表于 12-18 14:49 750次阅读

    设备管理通道控制四种方式

    设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送,外围设备和内存之间的输入/输出控制方式四种,下面分别介绍。
    发表于 12-08 14:05 1018次阅读
    设备管理通道控制<b class='flag-5'>四种</b><b class='flag-5'>方式</b>

    四种接近传感PK,谁能胜出?

    四种接近传感PK,谁能胜出?
    的头像 发表于 12-07 09:28 1678次阅读
    <b class='flag-5'>四种</b>接近传感<b class='flag-5'>器</b>PK,谁能胜出?