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

    文章

    2904

    浏览量

    102994
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112037
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    定时器如何实现定时任务

    1.1、单次定时任务实现 boost 的asio库里有几个定时器,老的有 deadline_timer , 还有三个可配合 C++11 的 chrono
    的头像 发表于 11-09 17:20 368次阅读

    定时器设计实现

    ,并返回ITimer类型的共享指针。其中ITimer类中定义了start和stop方法,用于启动或停止当前定时器。 TimerManager还有一个内部类TimerMessageQueue用于实现
    的头像 发表于 11-08 16:50 278次阅读

    STM32如何使用定时器实现微秒(us)级延时?

    STM32如何使用定时器实现微秒(us)级延时? 在STM32微控制器中,可以使用定时器实现微秒级延时。具体来说,可以使用定时器的计数器和自
    的头像 发表于 11-06 11:05 3040次阅读

    定时器定时方式精准控制步进电机速度

    本节介绍用定时器定时方式,精准控制脉冲时间,从而控制步进电机速度
    的头像 发表于 10-26 14:14 776次阅读
    用<b class='flag-5'>定时器</b><b class='flag-5'>定时</b>的<b class='flag-5'>方式</b>精准控制步进电机速度

    使用MM32F0270 定时器DMA方式输出PWM

    使用MM32F0270 定时器DMA方式输出PWM
    的头像 发表于 10-17 14:47 529次阅读
    使用MM32F0270 <b class='flag-5'>定时器</b>DMA<b class='flag-5'>方式</b>输出PWM

    BCM控制方式在STM32中的实现—使用高级定时器

    电子发烧友网站提供《BCM控制方式在STM32中的实现—使用高级定时器.pdf》资料免费下载
    发表于 09-20 10:21 0次下载
    BCM控制<b class='flag-5'>方式</b>在STM32中的<b class='flag-5'>实现</b>—使用高级<b class='flag-5'>定时器</b>

    555定时器如何实现多谐振荡?

    555定时器如何实现多谐振荡 555定时器作为一种常见的时序集成电路,在电子工程的应用中扮演着非常重要的角色。它具有广泛的应用领域,例如频率分频、计时、方波发生器和多谐振荡等。这篇文章主要探讨555
    的头像 发表于 09-02 16:19 1722次阅读

    555定时器构成1秒脉冲

    和应用。 一、555定时器的工作原理 555定时器是一种集成电路,由三个主要部分组成:比较器、SR锁存器和输出驱动器。555定时器最广泛应用的是单稳态两种基本工作方式,可根据外接器件的
    的头像 发表于 08-24 15:49 6070次阅读

    555定时器各组成部分介绍 555定时器四种典型应用

    555定时器能够实现多种功能,如振荡器、定时器、触发器等。外部的电阻、电容和配置方式决定了具体的工作模式和特性。因此,在使用555定时器时,
    的头像 发表于 08-15 14:35 7438次阅读
    555<b class='flag-5'>定时器</b>各组成部分介绍 555<b class='flag-5'>定时器</b>的<b class='flag-5'>四种</b>典型应用

    FreeRTOS的定时器设计实现

    定时器用于根据系统时启动特定的函数,执行相应的任务。FreeRTOS的定时器可以配置启动一次或者间隔一定时间执行。
    的头像 发表于 07-25 15:28 1001次阅读
    FreeRTOS的<b class='flag-5'>定时器</b>设计<b class='flag-5'>实现</b>

    STM32F407 基本定时器使用

    介绍STM32F407基本定时器的配置方法,分别介绍轮询方式、中断方式使用定时器完成定时
    的头像 发表于 07-06 14:32 2120次阅读
    STM32F407 基本<b class='flag-5'>定时器</b>使用

    什么是软件定时器?软件定时器实现原理

    软件定时器是用程序模拟出来的定时器,可以由一个硬件定时器模拟出成千上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的
    的头像 发表于 05-23 17:05 1848次阅读

    定时器的刷新方式

    定时器
    YS YYDS
    发布于 :2023年05月23日 14:21:09