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 1732 LCS变形

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1732 1732 51nod婚姻介绍所 题目来源: 原创 基准时间限制:1 ...

  2. ie-9 以下ajax无法跨域的问题。只要add:jQuery.support.cors=true;即可

    if (!jQuery.support.cors && window.XDomainRequest) { var httpRegEx = /^https?:\/\//i; var ge ...

  3. 如何去除Linux文件的^M字符

    Windows上写好的文件,在Linux或者Unix下打开,每一行都会出多出^M这样的字符,这是因为Windows与*nix的换行符不同所致,我们看看文件格式有什么不同.*注:“^M”,需要使用Ctr ...

  4. THUWC2019 滚粗记

    因为真的滚粗了,所以咕咕咕 膜清华爷 OYJason

  5. wpf中将string格式的颜色转换成color类型

    wpf中Brushes有很多对应的颜色,先盗张图,每个颜色对于的名称和ARGB值有了,问题是有时候我们取到的颜色是ARGB值,而且是string类型的,该怎么转换成color呢,只有转换成color之 ...

  6. bzoj 3028 食物——生成函数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3028 把式子写出来,化一化,变成 x / ((1-x)^4) ,变成几个 sigma 相乘的 ...

  7. bzoj 2115 [Wc2011] Xor——路径和环的转化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 思路很精妙.好像能应用到很多地方. 发现如果路径上有环,可以通过一些走法达到 异或了那 ...

  8. 使用ajax技术实现简单登录操作

    1.ajax:特点在web上面通过JavaScript,使用异步的XmlHttp请求,实现无刷新的Web界面 首先:创建ajax对象 再次:向服务器端实现ajax请求 最后:回调 创建异步请求对象 & ...

  9. 深入理解java虚拟机 精华总结(面试)(转)

    一.运行时数据区域 3 1.1 程序计数器 3 1.2 Java虚拟机栈 3 1.3 本地方法栈 3 1.4 Java堆 3 1.5 方法区 3 1.6 运行时常量池 4 二. hotspot虚拟机对 ...

  10. debug的时候出现停在ThreadPoolexecutor.class文件中停留的解决办法

    原因: The posted stack trace indicates that a RuntimeException was encountered in a Daemon thread. Thi ...