schedule与scheduleAtFixedRate:

不延时:

  schedule(TimerTask, Date runDate, long period)方法任务不延时----Date类型

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* schedule(TimerTask, Date runDate, long period)方法任务不延时----Date类型
*/
public class Test { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(1000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当没有延时,则下一次执行任务的开始时间是上一次任务的开始时间加上period时间(循环间隔)
*/
public static void main(String[] args) {
MyTask task = new MyTask();
Calendar calendar = Calendar.getInstance();
Date runDate = calendar.getTime();
Timer timer = new Timer();
timer.schedule(task, runDate, 4000);
}
}

  schedule(TimerTask, long delay, long period)方法任务不延时----long类型

 import java.util.Timer;
import java.util.TimerTask; /**
* schedule(TimerTask, long delay, long period)方法任务不延时----long类型
*/
public class Test2 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(1000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当没有延时,则第一次执行任务的时间是任务的开始时间加上delay(延迟时间),
* 接下来执行任务的时间是上一次任务的开始时间加上period(循环间隔时间)
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("当前时间为:" + System.currentTimeMillis());
Timer timer = new Timer();
timer.schedule(task, 3000, 4000);
}
}

  scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任务不延时----Date类型

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任务不延时----Date类型
*/
public class Test { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(1000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当没有延时,则下一次执行任务的时间是上一次任务的开始时间加上period时间(循环间隔)
*/
public static void main(String[] args) {
MyTask task = new MyTask();
Calendar calendar = Calendar.getInstance();
Date runDate = calendar.getTime();
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, runDate, 4000);
}
}

  scheduleAtFixedRate(TimerTask, long delay, long period)方法任务不延时----long类型

 import java.util.Timer;
import java.util.TimerTask; /**
* scheduleAtFixedRate(TimerTask, long delay, long period)方法任务不延时----long类型
*/
public class Test2 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(1000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当没有延时,如果执行任务的时间没有被延时,则第一次执行任务的时间是任务的开始时间加上delay(延迟时间),
* 接下来执行任务的时间是上一次任务的开始时间加上period(循环间隔时间)
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("当前时间为:" + System.currentTimeMillis());
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 3000, 4000);
}
}

延迟:

  schedule(TimerTask, Date runDate, long period)方法 任务延时----Date类型

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* schedule(TimerTask, Date runDate, long period)方法 任务延时----Date类型
*/
public class Test3 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(5000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,则下一次任务的执行时间是上一次任务结束时的时间作为参考计算
*/
public static void main(String[] args) {
MyTask task = new MyTask();
Calendar calendar = Calendar.getInstance();
Date runDate = calendar.getTime();
Timer timer = new Timer();
timer.schedule(task, runDate, 2000);
}
}

  schedule(TimerTask, long delay, long period)方法任务延时----long类型

 import java.util.Timer;
import java.util.TimerTask; /**
* schedule(TimerTask, long delay, long period)方法
* 任务延时----long类型
*/
public class Test4 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(5000);//延时5秒
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,那么下一次任务的执行时间是上一次任务结束时的时间作为参考计算
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("当前时间为:" + System.currentTimeMillis());
Timer timer = new Timer();
timer.schedule(task, 3000, 2000);
}
}

  scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任务延时----Date类型

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; /**
* scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任务延时----Date类型
*/
public class Test3 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(5000);
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,则下一次任务的执行时间是上一次任务结束时的时间作为参考计算
*/
public static void main(String[] args) {
MyTask task = new MyTask();
Calendar calendar = Calendar.getInstance();
Date runDate = calendar.getTime();
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, runDate, 2000);
}
}

  scheduleAtFixedRate(TimerTask, long delay, long period)方法任务延时----long类型

 import java.util.Timer;
import java.util.TimerTask; /**
* scheduleAtFixedRate(TimerTask, long delay, long period)方法
* 任务延时----long类型
*/
public class Test4 { public static class MyTask extends TimerTask{
@Override
public void run() {
try {
System.out.println("begin timer =" + System.currentTimeMillis());
Thread.sleep(5000);//延时5秒
System.out.println("end timer =" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} /**
* 从运行结果可以看出,当有延时的情况下,如果执行任务的时间被延时,那么下一次任务的执行时间是上一次任务结束时的时间作为参考计算
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("当前时间为:" + System.currentTimeMillis());
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 3000, 2000);
}
}

测试schedule()方法不具有追赶执行性:

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class Test { public static class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("begin timer:" + new Date());
System.out.println("end timer:" + new Date());
}
} /**
* 测试schedule()方法不具有追赶执行性
* 也就是如果计划时间在当前时间之前,那么当运行程序时,任务从当前时间开始执行,
* 计划时间到当前之间这段时间的任务就被取消了,不被执行,也就是任务不追赶
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("现在执行时间:" + new Date());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
Date runDate = calendar.getTime();
System.out.println("计划执行时间为:" + runDate);
Timer timer = new Timer();
timer.schedule(task, runDate, 2000);
}
}

测试scheduleAtFixedRate()方法具有追赶执行性:

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class Test2 { public static class MyTask extends TimerTask {
@Override
public void run() {
System.out.println("begin timer:" + new Date());
System.out.println("end timer:" + new Date());
}
} /**
* 测试scheduleAtFixedRate()方法具有追赶执行性
* 从运行结果可以看到,计划执行时间和当前时间之间对应的任务被补充性的执行,这就是task任务追赶特性
* 白话就是虽然时间过了,但是任务会在当前被补充执行完
*/
public static void main(String[] args) {
MyTask task = new MyTask();
System.out.println("现在执行时间:" + new Date());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
Date runDate = calendar.getTime();
System.out.println("计划执行时间为:" + runDate);
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, runDate, 2000);
}
}

schedule与scheduleAtFixedRate比较的更多相关文章

  1. schedule() 和 scheduleAtFixedRate() 区别

    1.  schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...

  2. schedule和scheduleAtFixedRate区别

    需求: 由于系统长期运作,各设备之间产生很多信息,一段时间后需要清除数据 考虑方案: 用schedule还是scheduleAtFixedRate,在此比较分析了下这两个的区别 schedule和sc ...

  3. schedule() 和 scheduleAtFixedRate() 的区别--转载

    1.  schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...

  4. 简单理解java中timer的schedule和scheduleAtFixedRate方法的区别

    timer的schedule和scheduleAtFixedRate方法一般情况下是没什么区别的,只在某个情况出现时会有区别--当前任务没有来得及完成下次任务又交到手上. 我们来举个例子: 暑假到了老 ...

  5. Timer类的schedule和scheduleAtFixedRate 简单应用

    Timer类可以用作定时任务,主要的方法有schedule和scheduleAtFixedRate. schedule(TimerTask task, Date time) 安排在指定的时间执行指定的 ...

  6. Timer的schedule和scheduleAtFixedRate方法的区别解析(转)

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...

  7. Timer的schedule和scheduleAtFixedRate方法的区别解析

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...

  8. Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)

    package com.thread.test.thread; import java.util.Timer; import java.util.TimerTask; import java.util ...

  9. schedule vs scheduleAtFixedRate

    最好的方法是在两者之间区分 timer灵感时间设定过去时间T,scheduleAtFixedRate将从T现在所有的任务中运行,schedule而该任务将只运行从现在开始计时. public clas ...

随机推荐

  1. 51nod 1255 贪心/构造

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255 1255 字典序最小的子序列 题目来源: 天津大学OJ 基准时间限 ...

  2. MLPClassifier 隐藏层不包括输入和输出

    多层感知机(MLP)原理简介 多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以 ...

  3. uva1315 Crazy tea party(找规律)

    题意就是说把顺时针排的1到n换成逆时针排的需要的最少交换步数. 如果是线形的一串数,需要的交换次数就是个冒泡排序的交换次数:n*(n-1)/2,或者用a[i]=(i-1)+a[i-1]推出来. 对于环 ...

  4. uva10815(set的应用)

    紫书例题,这道题的例程让我长了知识.以前没有用过cctype和stringstream相关的东西.很实用,值得学习. #include <cctype>的函数 c++中应该是#includ ...

  5. windows下matplotlib的安装

    在上一篇中我想用matplotlib,无奈一直装不上,就在卸了又装装了又卸,反反复复之后,终于装好了. 初学python,首先就装了numpy,倒也没有多复杂,有需要的朋友可以直接http://sou ...

  6. python_根据"词库"进行“词联想”

    输入法中,当你输入一个字的时候,输入法就能猜出你要输入什么词.这就是词联想.现在,再python中简单实现类似这样的功能:根据制定好的词库,输入一个新的词,帮助实现词联想.其中分词用了jieba包. ...

  7. LeetCode 340. Longest Substring with At Most K Distinct Characters

    原题链接在这里:https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/ 题目: Give ...

  8. (转)基于PHP——简单的WSDL的创建(WSDL篇)

    本文转载自:http://blog.csdn.net/rrr4578/article/details/24451943 1.建立WSDL文件     建立WSDL的工具很多,eclipse.zends ...

  9. demo1 spark streaming 接收 kafka 数据java代码WordCount示例

    1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...

  10. Git学习笔记(二)分支管理与合并及Bug分支

    一.分支管理 1.什么是分支 分支就相当于我们看科幻片里的平行宇宙,如果两个平行宇宙互不干扰,那铁定是啥事儿没有.不过,在某个时间点,两个平行宇宙合并了呢?假如两个宇宙中都有你的影子, 合并之后相当于 ...