前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【愚公系列】2023年10月 Java教学课程 075-定时器

【愚公系列】2023年10月 Java教学课程 075-定时器

作者头像
愚公搬代码
发布于 2025-05-28 07:13:36
发布于 2025-05-28 07:13:36
5400
代码可运行
举报
文章被收录于专栏:历史专栏历史专栏
运行总次数:0
代码可运行

🚀前言

定时器是一种计时工具,用于在设定的时间间隔后执行某项任务。它通常用于计算机程序中,可以编程来执行特定的操作,比如在一定时间内执行某个函数或动作。在嵌入式系统中,定时器可用于周期性地触发某些功能,如采样、输出等。定时器的功能很多,常见的有延时、计时、精确定时等。

🚀一、定时器

🔎1.概述

Java中定时器是一种用于执行一些任务或事件的机制,这些任务或事件可以在指定的时间间隔后执行或者在指定的时间点执行。

Java中有两种类型的定时器:

  1. java.util.Timer:这是一个基本的定时器类,可以用于执行指定的任务,也可以通过设置计划表和延迟时间来进行周期性任务的执行。
  2. java.util.concurrent.ScheduledExecutorService:这是Java 5之后引入的高级定时器类,提供了更加灵活和强大的功能,可以执行各种类型的任务,包括延迟、周期性和定时等任务。

使用Java定时器可以帮助我们实现定时任务、心跳检测等功能,可以提高程序的效率和可靠性。但是,在使用定时器的过程中需要注意线程安全和资源占用等问题。

🔎2.Timer

🦋2.1 Timer定时器

Java中的Timer定时器是一种基本的定时器类,它可以在指定的时间间隔后执行任务,或者在指定的时间点执行任务。下面是使用Java Timer类创建定时器的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {
    public static void main(String[] args) {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task executed at: " + System.currentTimeMillis());
            }
        };
        timer.schedule(task, 0, 1000); // 每隔1秒执行一次任务
    }
}

上面的代码使用了Timer类创建了一个定时器对象,然后创建了一个定时任务对象TimerTask,并重写了它的run()方法,用于定时执行任务。最后通过调用定时器对象的schedule()方法来启动定时器,并设置任务的执行间隔时间为1秒钟。

另外,Timer还提供了一些其他的方法,例如scheduleAtFixedRate()方法可以保证任务按照固定频率执行,无论上一个任务是否完成。以下是一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {
    public static void main(String[] args) {
        Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task executed at: " + System.currentTimeMillis());
            }
        };
        long delay = 1000L; // 延迟1秒后开始执行
        long period = 2000L; // 每隔2秒执行一次
        timer.scheduleAtFixedRate(task, delay, period);
    }
}

上述代码中,使用了scheduleAtFixedRate()方法来设置定时任务的执行间隔时间为2秒钟,这个时间是指每次任务执行完成后的间隔时间。这样就可以实现任务的循环执行,无需等待上一个任务执行完成。

需要注意的是,Timer定时器是单线程的,如果任务执行时间较长或者任务数量过多,就会影响定时器的性能和准确性。因此,对于需要定时执行大量或耗时任务的应用,建议使用更加高级的ScheduledExecutorService定时器来实现。

🦋2.2 Timer定时器的特点和存在的问题

Timer定时器是Java提供的一种工具,可以在指定的时间范围内周期性地执行某些任务。它的特点包括:

  1. 简单易用:Timer定时器使用起来非常简单,只需要指定需要执行的任务和执行时间即可。
  2. 高精度:Timer定时器使用的计时器精度很高,可以达到毫秒级别,保证定时任务的精确性。
  3. 多线程支持:Timer定时器在内部使用了多线程,可以同时执行多个定时任务。

但是,Timer定时器也存在一些问题:

  1. 不适合长时间运行:当需要运行长时间的任务时,Timer定时器不太适合使用。因为Timer定时器内部会创建一个线程来执行任务,如果任务运行时间太长,那么会导致Timer定时器的线程池中的线程被全部占用,其他任务就无法得到执行。
  2. 不太可靠:Timer定时器的执行依赖于系统时间,如果系统时间发生变化,那么定时器的执行也会发生变化。
  3. 没有异常处理:当定时任务中出现异常时,Timer定时器并不能很好地处理异常,可能会导致定时任务停止执行。

🔎3.ScheduledExecutorService

🦋3.1 ScheduledExecutorService定时器

ScheduledExecutorService是Java中的一个定时器,可以用来实现定时任务。它可以设置定时任务的间隔时间、执行次数以及执行方式(单次执行或周期执行)。

下面是一个简单的案例,演示如何使用ScheduledExecutorService实现每隔一段时间输出一条日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Scheduler {
    
    public static void main(String[] args) {
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("Scheduled task running at " + System.currentTimeMillis());
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
}

这个案例中,我们创建了一个ScheduledExecutorService实例,然后使用scheduleAtFixedRate方法来执行一个Runnable实例。这个Runnable实例就是我们要定时执行的任务,它的run方法中输出一条日志。scheduleAtFixedRate方法的第一个参数是要执行的任务,第二个参数是初始延迟时间,第三个参数是执行间隔时间,第四个参数是时间单位(这里使用秒作为单位)。

这个案例中,ScheduledExecutorService会每隔1秒执行一次任务,输出一条日志。如果需要在一段时间后只执行一次任务,可以使用schedule方法,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
executor.schedule(new Runnable() {
    @Override
    public void run() {
        System.out.println("Scheduled task running only once");
    }
}, 5, TimeUnit.SECONDS);

这个任务会在5秒后执行一次,然后就不再执行了。

🦋3.2 ScheduledExecutorService的优点
  1. 可以延迟执行任务:可以在指定的时间后执行任务,且任务只会执行一次。
  2. 可以周期性执行任务:可以在指定的时间间隔内多次执行任务。
  3. 灵活的线程管理:可以指定线程池的大小,线程池的工作方式等,从而更好地控制任务的执行。
  4. 提供了各种方便的工具方法:可以帮助开发者在任务执行前或执行后处理任务相关的操作。
  5. 可以处理异常:在任务执行过程中发生异常时可以提供一定的处理机制,从而更好地保障系统稳定。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、定时器
    • 🔎1.概述
    • 🔎2.Timer
      • 🦋2.1 Timer定时器
      • 🦋2.2 Timer定时器的特点和存在的问题
    • 🔎3.ScheduledExecutorService
      • 🦋3.1 ScheduledExecutorService定时器
      • 🦋3.2 ScheduledExecutorService的优点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档