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篇的更多相关文章

  1. Java NIO全面详解(看这篇就够了)

    很多技术框架都使用NIO技术,学习和掌握Java NIO技术对于高性能.高并发网络的应用是非常关键的@mikechen NIO简介 NIO 中的 N 可以理解为 Non-blocking,不单纯是 N ...

  2. [转帖]前端-chromeF12 谷歌开发者工具详解 Network篇

    前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作 ...

  3. [转帖]前端-chromeF12 谷歌开发者工具详解 Sources篇

    前端-chromeF12 谷歌开发者工具详解 Sources篇 原贴地址:https://blog.csdn.net/qq_39892932/article/details/82498748 cons ...

  4. [转帖]前端-chromeF12 谷歌开发者工具详解 Console篇

    前端-chromeF12 谷歌开发者工具详解 Console篇 https://blog.csdn.net/qq_39892932/article/details/82655866 趁着搞 cloud ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. 淘宝JAVA中间件Diamond详解(2)-原理介绍

    淘宝JAVA中间件Diamond详解(二)---原理介绍 大家好,通过第一篇的快速使用,大家已经对diamond有了一个基本的了解.本次为大家带来的是diamond核心原理的介绍,主要包括server ...

  7. windows下的定时任务设置详解

    windows下的定时任务设置详解 一.总结 一句话总结: 1.php.exe是什么? 就是php中自带的一个exe,不是我们写的,这个exe是可以执行其他的PHP的 二.windows下的定时任务设 ...

  8. 最强Java并发编程详解:知识点梳理,BAT面试题等

    本文原创更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 知识体系系统性梳理 Java 并发之基础 A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解 ...

  9. Chrome开发者工具详解(5)-Application、Security、Audits面板

    Chrome开发者工具详解(5)-Application.Security.Audits面板 这篇文章是Chrome开发者工具详解这一系列的最后一篇,介绍DevTools最后的三个面板功能-Appli ...

随机推荐

  1. AI项目(CV方向)研发流程

  2. flutter 运行别人项目 包无法导入报错:Target of URI doesn't exist 'package:flutter/material.dart' 解决方法

    命令行里运行  flutter packages get

  3. 【转载】 tf.train.slice_input_producer()和tf.train.batch()

    原文地址: https://www.jianshu.com/p/8ba9cfc738c2 ------------------------------------------------------- ...

  4. Flutter中的Stack、Align、Positioned的使用

    import 'package:flutter/material.dart'; import 'package:flutter_testdemo001/res/listData.dart'; void ...

  5. sklearn使用高斯核SVM显示支持向量

    import graphviz import mglearn from mpl_toolkits.mplot3d import Axes3D from sklearn.datasets import ...

  6. jmeter的安装教程

    JMETER安装教程 jmeter的安装教程 1:安装jdk并且配置好环境变量,此处就不做赘述(前面的文档中有) 2:下载jmeter文件和jmeter的插件文件 JMeter:http://jmet ...

  7. Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

    Input.GetMouseButtonDown 在fixedupdate中会出现丢失问题,在update中则完全没这个问题

  8. solr关于日期范围查询

    问题:从solr上查询创建日期在2019-06-25到2019-06-26之间的数据 createDate:[2019-06-25 TO 2019-06-26]

  9. mac 上更改环境变量

    第一次配置Mac的环境变量,到网上转了一圈才找到正确方法. 打开终端,新建.bash_profile文件在~/目录下(如果电脑里已经有了这个文件,跳过这一步) touch ~/.bash_profil ...

  10. jenkins最新版下载安装

    前提:安装配置 jetty 在线下载jetty# wget http://download.eclipse.org/jetty/8.1.17.v20150415/dist/jetty-distribu ...