Java定时任务的实现
java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。
一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。
java.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, 程序结束timer也自动结束),注意,javax.swing 包中也有一个Timer类,如果import中用到swing包,要注意名字的冲突。
TimerTask task = new TimerTask() { public void run() { ... //每次需要执行的代码放到这里面。 } };
//以下是几种调度task的方法:
timer.schedule(task, time); // time为Date类型:在指定时间执行一次。
timer.schedule(task, firstTime, period); // firstTime为Date类型,period为long // 从firstTime时刻开始,每隔period毫秒执行一次。
timer.schedule(task, delay) // delay 为long类型:从现在起过delay毫秒执行一次
timer.schedule(task, delay, period) // delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
java.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, 程序结束timer也自动结束),注意,javax.swing包中也有一个Timer类,如果import中用到swing包,要注意名字的冲突。
TimerTask task = new TimerTask() { public void run() { ... //每次需要执行的代码放到这里面。 } };
//以下是几种调度task的方法:
timer.schedule(task, time); // time为Date类型:在指定时间执行一次。
timer.schedule(task, firstTime, period); // firstTime为Date类型,period为long // 从firstTime时刻开始,每隔period毫秒执行一次。
timer.schedule(task, delay) // delay 为long类型:从现在起过delay毫秒执行一次。
timer.schedule(task, delay, period) // delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
依据Java自身提供的接口实现,通过监听器(Listener)和定时器(Timer)定时执行某个任务(Task)。
专业的开源工具可参考Quartz:http://www.opensymphony.com/quartz/
[size=large][b]Java Web版[/b][/size]
MyListener:
import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener { private Timer timer = null; public void contextInitialized(ServletContextEvent event) { timer = new Timer(true);//true设置定时器为守护线程,当此程序只剩下守护线程时,JVM退出 //设置任务计划,启动和间隔时间 timer.schedule(new MyTask(), 0, 86400000); }
public void contextDestroyed(ServletContextEvent event) { timer.cancel(); }
}
MyTask:
import java.util.TimerTask;public class MyTask extends TimerTask { public void run() { // System.out.println("call at " + (new Date())); // TODO 此处添加具体任务代码 }
}
web.xml配置:
<listener> <listener-class>com.fastunit.samples.listener.MyListener</listener-class></listener>
[size=large][b]Java版[/b][/size]
下面是一个完整的例子,由两个类组成,一个定制任务,一个调用java.util.Timer
定制任务:
import java.util.TimerTask;
public class TimeTask extends TimerTask { @Override public void run() { System.out.println("running"); }}
调用java.util.Timer:
本例中将定时任务设定为守护线程,马上开始执行,每个1000ms重复执行,5s后主线程结束,由于是守护线程,故随着主线程的结束,定时任务也结束。
import java.util.Timer;
public class TimerTest { public static void main(String[] args) { Timer timer = new Timer(true); timer.schedule(new TimeTask(), 0,1000); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } }}
Java定时任务的实现相关推荐
- java定时任务,每天定时执行任务
java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager {//时间间隔private static final long PERIOD_DA ...
- java定时任务框架elasticjob详解
这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...
- Springboot2 Quartz实现JAVA定时任务的动态配置
动态配置Quartz.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 文章目录 一.需求背景 1. 问题现象 2. 问题分析 3. 解决方案 二.需求背景 2.1. maven依 ...
- Java定时任务解决方案
Java定时任务解决方案 参考文章: (1)Java定时任务解决方案 (2)https://www.cnblogs.com/zhixiang-org-cn/p/9490877.html (3)http ...
- Java定时任务(一) Timer及TimerTask的案例解析及源码分析
Java定时任务(一) Timer及TimerTask的案例解析及源码分析 一.概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样.比如我们会注意到12306网站 ...
- JAVA定时任务的简单实现
Java定时任务的简单实现 2011-01-02 18:34:43| 分类: 软件开发 | 标签:void timer import param dateutil |字号大中小 订阅 ...
- Java定时任务技术分析
<从零打造项目>系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 ...
- Java 定时任务详解
文章目录 单机定时任务技术选型 Timer ScheduledExecutorService Spring Task 时间轮 分布式定时任务技术选型 Quartz Elastic-Job XXL-JO ...
- Java定时任务手工触发-使用Arthas
1. 前言 在测试环境经常需要手工触发Java应用中的定时任务,如果定时任务没有使用Quartz,Java应用中也没有提供其他方法手工触发定时任务,可以使用Arthas快速实现以上目的. 以下使用Ar ...
- JAVA定时任务时间配置
JAVA定时任务时间配置 每个位置配置解释 参数说明 通配符说明 常用示例 每个位置配置解释 秒 分 时 日 月 周 年* * * * * * * 参数说明 序号 说明 是否必填 允许填写的值 允许的 ...
最新文章
- 指定某行复制多次的方法
- 图像分割综述:FCN、U-Net、PSPNet、DeepLab
- Java虚拟机:垃圾回收机制与垃圾收集器
- Elastic Search学习笔记5——基本操作
- 推荐:Java性能优化系列集锦
- 使用ssh tunnel 来做代理或跳板
- 正式踏入24岁了……
- TikZ绘图示例——尺规作图: 圆内接正五边形的近似画法
- Mask-Predict: Parallel Decoding of Conditional Masked Language Models
- 【Rollo的Python之路】比较运算符
- 1031 查验身份证 (15 分) python
- 1月第3周易盾业务风控关注 | 2020年全国受理网络违法和不良信息举报1.63亿件
- 格里高利历java_Java 日历笔记
- 32位和64位操作系统与System,System32,Syswow64的区别
- 典型2R机械臂结构分析 2R-manipulator Geometric Modeling
- LLVM IR 语法
- [转载]我如何在计算机视觉顶级会议CVPR上发表论文?
- 【通信电子电路】第11章 交流电路功率分析
- 【一起来学Java】继承,多态,抽象,接口
- 十八、Stream 流