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. 范围指示器Extent Indicators

    范围指示器Extent Indicators 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com   商务合作,科技咨询,版权转让:向日葵,135- ...

  2. GridLayout: GridLayout使用简介(转)

    Android 布局之GridLayout 1 GridLayout简介 GridLayout是Android4.0新提供的网格矩阵形式的布局控件. GridLayout的继承关系如下:java.la ...

  3. mysql - ERROR 1114 (HY000): The table is full

    mysql - ERROR 1114 (HY000): The table is full - Stack Overflowhttps://stackoverflow.com/questions/73 ...

  4. Vuex 的使用 State Mutation Getter Action

    import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); /*1.state在vuex中用于存储数据*/ var state={ cou ...

  5. VPB编译日志1

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Release x64 ------1> Checking Build System1> CMake ...

  6. Flutter TextField详解

    原文地址:https://www.jianshu.com/p/54419a143d70 实现TextField说简单也简单,说有坑,坑也不小,下面从易到难介绍一下使用 1.最简单的就是无参数调用构造方 ...

  7. Apache调优(二)

    Apache调优(一) (1).Apache运行模式说明 Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式:Prefork(进程模式).Wo ...

  8. 【Leetcode_easy】925. Long Pressed Name

    problem 925. Long Pressed Name solution1: class Solution { public: bool isLongPressedName(string nam ...

  9. 04点睛Spring4.1-资源调用

    转发:https://www.iteye.com/blog/wiselyman-2210666 4.1 Resource spring用来调用外部资源数据的方式 支持调用文件或者是网址 在系统中调用p ...

  10. Java进阶教程:使用Lombok提升开发效率

    Java进阶教程:使用Lombok提升开发效率 Lombok Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO).它通过注释实现这 ...