Java定时任务工具详解之Timer篇
Java定时任务调度工具详解
什么是定时任务调度?
◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务。
在Java中的定时调度工具?
◆ Timer ◆Quartz
Timer和Quarzt的区别?
◆ 出身不同(Timer由JDK直接提供,调用方式简单粗暴,不需要别的jar支持)
◆ 能力区别(TImer简单的定时任务,如需要每个星期天的8点,则需要Quarzt)
◆ 底层机制
Timer简介
Timer的定义:
有且仅有一个后台线程对多个业务线程进行定时定频率的调度。

主要构件:


第二部分 Timer实战演练
通过程序来讲解Timer
package cn.springbook.timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
private String name;
// 构造方法
public MyTimerTask(String name) {
this.name = name;
}
public void run() {
// 打印当前name的值
System.out.println("Current exec name is:" + this.name);
}
}
package cn.springbook.timer;
import java.util.Timer;
public class MyTimer {
public static void main(String[] args) {
// 1、创建一个timer实例
Timer timer = new Timer();
// 2、创建一个MyTimerTask实例
MyTimerTask myTimerTask = new MyTimerTask("No.1");
// 3、通过timer定时定频率调用myTimerTask的业务逻辑
// 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次
timer.schedule(myTimerTask, 2000L, 1000L);
}
}
Timer的定时调度函数
schedule的四种用法
scheduleAtFixedRate的两种用法
schedule的四种用法:
schedule(task, time)
参数
task - 所要安排的任务
time - 执行任务的时间
作用:在时间等于或超过time的时候执行且仅执行一次task
package cn.springbook.timer; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimerTask; public class MyTimerTask extends TimerTask { private String name; // 构造方法
public MyTimerTask(String name) {
this.name = name;
} public void run() { Calendar calendar = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current exec time is:" + format.format(calendar.getTime()));
// 打印当前name的值
System.out.println("Current exec name is:" + this.name);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
package cn.springbook.timer; import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer; public class MyTimer {
public static void main(String[] args) {
// 1、创建一个timer实例
Timer timer = new Timer();
// 2、创建一个MyTimerTask实例
MyTimerTask myTimerTask = new MyTimerTask("No.1"); Calendar calendar = Calendar.getInstance();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current exec time is:" + format.format(calendar.getTime()));
calendar.add(Calendar.SECOND, 3);
/**
* 在时间等于或超过time的时候执行且执行一次task
* 如在2016-11-11 00:00:00执行一次task,打印任务名字
*/
myTimerTask.setName("schedule1");
timer.schedule(myTimerTask, calendar.getTime());
}
}
schedule(task, time, period)
参数
task - 所要安排的任务
time - 首次执行任务的时间
period - 执行一次task的时间间隔,单位是毫秒
/**
* 在时间等于或超过time的时候执行且执行一次task
* 如在2016-11-11 00:00:00执行一次task,打印任务名字
* 之后每隔两秒执行一次task
*/
myTimerTask.setName("schedule2");
timer.schedule(myTimerTask, calendar.getTime(), 2000);
schedule(task, delay)
参数
task - 所要安排的任务
delay - 执行任务前的延时时间,单位是毫秒
作用:等待delay毫秒后执行且仅执行一次task
/**
* 等待delay毫秒后执行且仅执行一次task
* 如现在是2016-11-11 00:00:00
* 则在2016-11-11 00:00:01执行一次task,打印任务名字
* 之后每隔1秒执行一次task
*/
myTimerTask.setName("schedule3");
timer.schedule(myTimerTask, 1000);
schedule(task, delay, period)
参数
task - 所要安排的任务
delay - 执行任务前的延迟时间,单位毫秒
period - 执行一次task的时间间隔,单位是毫秒
作用:
等待delay毫秒后首次执行task
之后每隔period毫秒重复执行一次task
/**
* 等待delay毫秒后执行且仅执行一次task
* 如现在是2016-11-11 00:00:00
* 则在2016-11-11 00:00:01执行一次task,打印任务名字
* 之后每隔2秒执行一次task
*/
myTimerTask.setName("schedule4");
timer.schedule(myTimerTask, 3000, 1000);
scheduleAtFixedRate的两种用法
scheduleAtFixedRate(task, time, period)
参数
task - 所要安排的任务
time - 首次执行任务的时间
period - 执行一次task的时间间隔,单位是毫秒
作用:
时间等于或超过time时首次执行task
之后每隔period毫秒重复执行一次task
/**
* 在时间等于或超过time的时候首次执行一次task
* 之后每隔period毫秒重复执行异一次task
* 如在2016-11-11 00:00:00执行一次task,打印任务名字
* 之后每隔两秒执行一次task
*/
myTimerTask.setName("scheduleAtFixedRate1");
timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000);
scheduleAtFixedRate(task, delay, period)
参数
task - 所要安排的任务
delay - 执行任务前的延迟时间,单位毫秒
period - 执行一次task的时间间隔,单位是毫秒
作用:
等待delay毫秒后首次执行task
之后每隔period毫秒重复执行一次task
/**
* 等待delay毫秒后执行且仅执行一次task
* 之后每隔period毫秒重复执行异一次task
* 如在2016-11-11 00:00:00执行一次task,打印任务名字
* 之后每隔两秒执行一次task
*/
myTimerTask.setName("scheduleAtFixedRate2");
timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);
Java定时任务工具详解之Timer篇的更多相关文章
- Java NIO全面详解(看这篇就够了)
很多技术框架都使用NIO技术,学习和掌握Java NIO技术对于高性能.高并发网络的应用是非常关键的@mikechen NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 N ...
- [转帖]前端-chromeF12 谷歌开发者工具详解 Network篇
前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作 ...
- [转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇
前端-chromeF12 谷歌开发者工具详解 Sources篇 原贴地址:https://blog.csdn.net/qq_39892932/article/details/82498748 cons ...
- [转帖]前端-chromeF12 谷歌开发者工具详解 Console篇
前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- 淘宝JAVA中间件Diamond详解(2)-原理介绍
淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...
- windows下的定时任务设置详解
windows下的定时任务设置详解 一.总结 一句话总结: 1.php.exe是什么? 就是php中自带的一个exe,不是我们写的,这个exe是可以执行其他的PHP的 二.windows下的定时任务设 ...
- 最强Java并发编程详解:知识点梳理,BAT面试题等
本文原创更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 知识体系系统性梳理 Java 并发之基础 A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解 ...
- Chrome开发者工具详解(5)-Application、Security、Audits面板
Chrome开发者工具详解(5)-Application.Security.Audits面板 这篇文章是Chrome开发者工具详解这一系列的最后一篇,介绍DevTools最后的三个面板功能-Appli ...
随机推荐
- docker 打印带时间的日志
1, 根据容器日志查看连接情况 docker logs 684 (因为从6.30日开是打印,太慢了.) 2,docker带参数的打印出日志 docker logs 684 --since=&quo ...
- un-资源-开源-WebGallery:Windows Web App Gallery
ylbtech-资源-开源-WebGallery:Windows Web App Gallery Windows Web App Gallery 1.返回顶部 2.返回顶部 3.返回顶部 ...
- Python设计模式之MVC模式
# -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...
- postgresql 利用pgAgent实现定时器任务
1.安装pgAgent 利用Application Stack Builder安装向导,安装pgAgent. 根据安装向导一步一步安装即可. 安装完成之后,windows服务列表中会增加一个服务:Po ...
- std::shared_mutex和std::mutex的性能对比(banchmark)
原文作者:@玄冬Wong 转载请注明原文出处:http://aigo.iteye.com/blog/2296462 key world: std::shared_mutex.std::mutex.pe ...
- python locust--Setups, Teardowns, on_start, and on_stop .
创建一个locust测试脚本,如下: from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): def set ...
- LODOP打印表格错位的几种情况
在网页设计中,表格经常用到百分比,表格在浏览器中展示,这个百分比是相对于浏览器的.还有div,各种浮动之类的相对位置,也有的用到百分比.而在LODOP打印中,百分比是相对于纸张的.LODOP中打印项的 ...
- 看看该死的jquery.form.js的用法,不是个东西
$("#btnReg").click(function () { var options = { //target: '#output', // 把服务器返回的内容放入id为out ...
- 【Leetcode_easy】993. Cousins in Binary Tree
problem 993. Cousins in Binary Tree 参考 1. Leetcode_easy_993. Cousins in Binary Tree; 完
- Linux文件误删恢复
一.需求研究 分析对比debugfs.testdisk 6.14.extundelete,对比各自官网介绍和操作说明本次决定研究extundelete对文件和目录的恢复操作. 二.项目内容 1.工具安 ...