关于定时任务,看着一系列就够了——5.JDK 线程+sleep 实现定时任务

简介: JDK 线程+sleep 实现简单的定时任务

一、简介

使用Thread类可以做简单的定时任务,主要思路是创建一个无限循环的线程,使用sleep来进行时间间隔。
调度器Scheduler:创建的Thread类在就是调度器;
触发器Trigger:sleep的睡眠时间就是触发器,触发规则;
执行器executors:线程内执行的方法;

二、示例代码

public class MainApp {

    public static void main(String[] args) {
        init();
    }

    public static void init() {
        new Thread(() -> {
            while (true) {
                try {
                    System.out.println(new Date()+" JAVA实现定时任务,每一分钟执行一次!");
                    Thread.sleep(1000 * 60 * 1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

三、总结

使用Thread类可以做最简单的定时任务,在run方法中有个while的死循环(当然还有其他方式),执行我们自己的任务。有个需要特别注意的地方是,需要用try...catch捕获异常,否则如果出现异常,就直接退出循环,下次将无法继续执行了。

这种方式做的定时任务,只能周期性执行,不能支持定时在某个时间点执行(即使修改添加一些代码能实现,也不建议使用Thread去实现固定时间的定时)。
此外,该线程可以定义成守护线程,在后台默默执行就好。
使用场景:比如项目中有时需要每隔10分钟去聚合一次数据,每过3分钟检查一下状态,每个一天统计一天的数据生产报表等,一些简单的周期性任务场景。
使用Thread类的优缺点
优点:这种定时任务非常简单,学习成本低,容易入手,对于那些简单的周期性任务,是个不错的选择,主要是时候自己做demo或者执行一些简单的任务,不建议用于工作项目中。
缺点:不支持指定某个时间点执行任务,不支持延迟执行等操作,如果任务执行时间过长也没用其他机制来保证任务的运行,功能过于单一,无法应对一些较为复杂的场景。

相关文章
|
8月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
719 0
|
8月前
|
Java 调度 开发者
JDK 21中的虚拟线程:轻量级并发的新篇章
本文深入探讨了JDK 21中引入的虚拟线程(Virtual Threads)概念,分析了其背后的设计哲学,以及与传统线程模型的区别。文章还将讨论虚拟线程如何简化并发编程,提高资源利用率,并展示了一些使用虚拟线程进行开发的示例。
1141 4
|
8月前
|
缓存 安全 Java
JDK8线程池BUG引发的思考
JDK8线程池BUG引发的思考
180 0
|
8月前
|
存储 缓存 并行计算
【面试问题】JDK并发类库提供的线程池实现有哪些?
【1月更文挑战第27天】【面试问题】JDK并发类库提供的线程池实现有哪些?
|
算法 安全 Java
【Java】JDK 21中的虚拟线程以及其他新特性
【Java】JDK 21中的虚拟线程以及其他新特性
240 0
|
监控 安全
并发编程系列教程(06) - 多线程之间通讯(wait、notify、sleep、Lock锁、Condition)
并发编程系列教程(06) - 多线程之间通讯(wait、notify、sleep、Lock锁、Condition)
83 0
|
2月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
|
3月前
|
Dubbo Java 应用服务中间件
剖析Tomcat线程池与JDK线程池的区别和联系!
剖析Tomcat线程池与JDK线程池的区别和联系!
168 0
剖析Tomcat线程池与JDK线程池的区别和联系!
|
3月前
|
监控 数据可视化 Java
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
|
4月前
|
监控 数据可视化 Java
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况