java定时器的实现_java定时器实现总结

article/2025/11/7 2:03:04

前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架。

0987baa926bd33171d1bdc7e65969797.png

1. JDK组件

(1) java.util.TimerTask

6e9a808a9854df071194cc8bb253e01c.png

MyTimerTask.java:

public class MyTimerTask extendsTimerTask {

@Overridepublic voidrun() {

System.out.println("MyTimerTask, now: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newDate()));

}public static voidmain(String[] args) {

Timer timer= newTimer();

timer.schedule(new MyTimerTask(), 1000, 1000);//timer.cancel();//停止调度器}

}

(2) java.util.concurrent.ScheduledThreadPoolExecutor(JDK5.0+之后推荐使用)

1fcbefde0d2adc1d74c20d9f9548f029.png

MyScheduledTask.java:

public class MyScheduledTask implementsRunnable {public voidrun() {

System.out.println("my scheduled task, now: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newDate()));

}

}

MyScheduledExecutor.java:

public classMyScheduledExecutor {public static voidmain(String[] args) {

ScheduledThreadPoolExecutor executor= new ScheduledThreadPoolExecutor(10);

ScheduledFuture future= executor.scheduleWithFixedDelay(new MyScheduledTask(), 1000, 1000, TimeUnit.MILLISECONDS);//future.cancel(true);//停止定时任务,Timer不能停止定时任务,只能关闭调度器//executor.shutdown();//关闭调度器

}

}

比较:java.util.concurrent.ScheduledThreadPoolExecutor比java.util.Timer更加灵活和高效。

2. Spring Task

(1) xml配置方式实现

TaskJob.java:

@Servicepublic classTaskJob {public voidjob1() {

System.out.println("指定Spring定时任务1, now: " + new SimpleDateFormat("yyy-MM-dd HH:mm:ss").format(newDate()));

}

}

spring.xml:

xsi:schemaLocation="

...

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.0.xsd">

(2) 注解方式实现

TaskJob2.java:

@Componentpublic classTaskJob2 {/*** 每隔一秒执行一次*/@Scheduled(cron="0/1 * * * * ?")public voidjob2() {

System.out.println("注解方式使用spring定时任务框架, now: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newDate()));

}

}

spring.xml:

xsi:schemaLocation="

...

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task-3.0.xsd">

(1) 独立使用Quartz(详见Quartz官方示例):

pom.xml:

org.quartz-scheduler

quartz

2.2.1

org.quartz-scheduler

quartz-jobs

2.2.1

定义定时任务,MyJob.java:

public class MyJob implementsJob {public void execute(JobExecutionContext arg0) throwsJobExecutionException {

System.out.println("执行Quartz定时任务实现, now: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(newDate()));

}

}

调度定时任务,MyJobSheduler:

public classMyJobSheduler {public static voidmain(String[] args) {try{

JobDetail job= JobBuilder.newJob(MyJob.class).withIdentity("myJob").build();

Trigger trigger=TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")

.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())

.build();

Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();

scheduler.scheduleJob(job, trigger);

scheduler.start();

}catch(SchedulerException e) {

e.printStackTrace();

}

}

}

【实现比较】

实现方式

优点

缺点

JDK组件

无需引入第三方依赖,控制灵活

仅支持简单任务调度,不支持指定日期等复杂定时任务

SpringTask

功能相对JDK方式全面(简单或指定日期等复杂任务调度),支持注解和配置2种方式

Quartz

开源,功能全面且强大(简单或指定日期等复杂任务调度),可独立使用,也可以与Spring集成 必须在项目中引入quartz依赖

在项目中必须引入quartz依赖

【使用总结】

1. J2EE项目

-- 未依赖Spring框架,建议使用Quartz。

-- 引入了Spring 3.x+,如果仅需要简单定时任务控制,建议使用Spring Task;否则建议使用Quartz。

-- 特别地,在Spring Boot项目中,根据需求可以灵活选择JDK,Spring Task或者Quartz。

2. 非J2EE项目

-- 简单定时任务控制,建议使用JDK实现:java.util.concurrent.ScheduledThreadPoolExecutor;否则建议使用Quartz。

附:在Linux环境下,可以直接使用crontab程序实现简单的定时任务,比如定时全量备份MySQL数据库。

7280df79620297e091f6f720f513c7d6.png


http://chatgpt.dhexx.cn/article/ebMWkTNP.shtml

相关文章

简单实现Java定时器

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【JavaEE】 🐲🐲本篇内容:自己实现Java定时器 🐯🐯作者简介:一名现大二的三非编程小白&…

java 定时器框架_java定时器

java定时器 什么是Java定时器? Java 定时器就是在给定的间隔时间执行自己的任务; Java实现定时器有以下几种: 通过Timer来实现定时任务 Timer 是来自 java.util.Timer 指定时间执行任务 /** * author spp * date 2020-10-14 09:04 **/ public class TimerTest { pub…

Java定时器Timer的使用

目录 一、Timer常用方法 1、在某个时间点执行一次任务 2、在某个时间点执行一次任务,接着每隔X秒执行一次任务 3、在N秒后执行一次任务 4、在N秒后执行一次任务,接着每隔X秒执行一次任务 二、Timer的多任务模式 一、Timer常用方法 Timer应用场景&a…

Java定时器选择

java计时器和死循环哪个好?哪个建议使用? 计时器性能更好,但是写起来稍微复杂一点。如果是非常短暂的延迟,用死循环也未尝不可。一般来说能不用死循环的尽量不用死循环!如果你使用的是JDK1.5以上的,可以使…

9.java定时器

java定时器 java的定时器有四种实现方式 使用java的timer类,这种方式可以灵活的控制定时器的开启关闭使用线程和线程池的方法,这种方式对于关闭定时器是不优雅的,甚至可能出错使用spring注解来启动定时任务,使用起来简单&#xff…

Java当中的定时器

目录 一、什么是定时器 二、Java当中的定时器 ①schedule()方法: ②TimerTask ​编辑 ③delay 三、实现一个定时器 前提条件: 代码实现: ①确定一个“任务”(MyTask)的描述: ②schedule方法: ③需要一个计时器 属性…

【Java定时器】: Java创建定时器的三种方式(详细讲解)

Java创建定时器的三种方式 第一种,常见的thread,创建一个Thread让他让循环里一直执行,通过 Thread.sleep 来达到 定时任务的效果。 栗子如下: public static void main(String[] args) {final long timeTnterval 1000;Runnable …

Java定时器

目录 一、认识定时器 1、什么是定时器 2、标准库的定时器 二、模拟实现定时器 1、描述定时器中的任务 2、管理多个任务 3、扫描线程 4、优化 5、最终代码 一、认识定时器 1、什么是定时器 定时器是实际开发中常用的一个重要组件,类似于我们生活中的“闹钟…

matlab画图函数之plot【matlab图行绘制一】

plot函数 plot(x,y,’–gs’,‘LineWidth’,2,‘MarkerSize’,10,‘MarkerEdgeColor’,‘b’,‘MarkerFaceColor’,[0.5,0.5,0.5]) plot函数是最基本、最常用的绘图函数,用于绘制线性二维图。有多条曲线时,循环使用由坐标轴颜色顺序属性定义的颜色&…

Matlab画图线型、符号及颜色设置

1. matlab 中线条的主要属性 Color: 颜色LineStyle: 线型LineWidth: 线宽Marker: 标记点的形状MarkerFaceColor: 标记点填充颜色MarkerEdgeColor: 标记点边缘颜色MarkerSize: 标记点大小 2. 各种属性的名称 2.1 线型 -Solid line (default) – Dashed line : Dotted line …

matlab 画图基本

内容安排如下: 1、基本绘制(图画大小、图形名称、图画背景、坐标轴名称、刻度范围、曲线颜色、坐标轴字体颜色等)2、多条曲线(plot hold on;plotyy;subplot;)3、日期及时间轴绘图4、…

MATLAB画图详细教程

本文将详细介绍如何用matlab绘图并美化。 关于figure() 创建图窗窗口:figure() figure()的属性: Name:在标题栏显示的名称,接字符串,如Test Position:在电脑屏幕上的位置和大小,后接向量[left,bottom,width,height]也就是说指定了图窗的左下角位置,再向右+width、…

MATLAB画图总结

前言 在进行数据处理展示的时候,为了能直观体现实验的结果,需要进行绘图,让人们能直观的记住数据的走向特征,图像是结果的一种可视化展现,因此掌握一些绘图方法非常重要,使用MATLAB可以很简单的进行画图。下…

matlab 画图基本介绍

1.在命令窗口输入命令时&#xff0c;可以不必每输入一条命令就按enter键执行&#xff0c;可以在输入几行后一同运行。方法是&#xff1a;换行时&#xff0c;只要在按住<shift>键的同时按<enter>键即可&#xff0c;否则matlab就会执行上面输入的所有语句。 2.如何将…

matlab画图操作(修改坐标轴及字体,加粗,颜色修改,适合论文画图)

matlab常用画图操作 1.设置坐标轴2.设置figure大小3.matlab线条设置4.子图设置5.颜色查询6.colorbar设置7.线条透明度设置8.设置坐标轴刻度形式&#xff08;对数刻度&#xff09;9.图例设置10 文件保存11 消除白色边框12 添加子标题13 调换y轴递增顺序 1.设置坐标轴 %设置坐标…

使用matlab画图中图

又到一年论文季&#xff0c;没想到临近投稿的我居然会被图片的清晰度打败&#xff0c;需要子母图的时候&#xff0c;我直接使用powerpoint进行拼接&#xff0c;多次png另存为&#xff0c;图已经糊出了新高度&#xff0c;那种超级糊图在论文里应该是投不出去的吧。。。但是&…

matlab-画图对坐标的显示

前言 许多小朋友对于matlab画图函数再熟悉不过了&#xff0c;但是画图里面还有更细小的地方我们还得注意&#xff0c;对于坐标的显示也是我们在日常生活中常需要我们做的&#xff0c;下面我就将以一个例子1来说明在画图中显示坐标的两种形式。 下面的数据取样格式为 提示&a…

Matlab画图相关知识

目录 一、绘制不同种类的图像 1.1.画一般曲线图 1.2.绘制柱状图 二、matlab的图像处理 2.1将多张图同时绘制在一个Figure上面&#xff0c;采用subplot函数 2.2改变matlab图像坐标刻度增长幅度 2.3设置坐标轴刻度为任意值 2.4在一张Figure中用同一个x对应两个y作图 2.5关于…

MATLAB画图使用不同的线型、点及标记

转载自&#xff1a;MATLAB画图使用不同的线型、点及标记 (baidu.com) 一、 线型、连续标记 先从最普通的说起。在plot函数中指定线型。 tlinspace(0,5,20); x1 t; x2 2*t; x3 3*t; x4 4*t; plot(t,x1,b,t,x2,g-o,t,x3,r*,t,x4,c:d); 这是基础的比较简单的情况。不做…

MATLAB绘图

在MATLAB中绘制函数图形的步骤如下&#xff1a; 先定义变量 x&#xff0c;通过指定的变量 x 值的范围&#xff0c;该函数被绘制&#xff1b; 然后定义函数&#xff0c; y f(x)&#xff1b; 最后调用 plot 命令&#xff0c;如 plot(x, y)。 接下来我们通过例子绘制简单的函…