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. Apache CommonLogging + Log4J

    package cn.byref.demo.logging; import org.apache.commons.logging.Log; import org.apache.commons.logg ...

  2. eclipse提交Git时忽略文件

    为了避免每次使用都有百度查找,自己保存一份,方便使用. 实现方式: Eclipse切换到Navigator视图,找到.gitignore文件(如果是maven项目,一般找作为modules的项目的.g ...

  3. Eclipse插件开发_异常_01_java.lang.RuntimeException: No application id has been found.

    一.异常现象 在运行RCP程序时,出现 java.lang.RuntimeException: No application id has been found. at org.eclipse.equ ...

  4. FMDB的操作(转),这篇比我写的好

    直接看吧 http://blog.devtang.com/blog/2012/04/22/use-fmdb/

  5. EF中使用Linq的Lambda比较字符串格式日期大小

    在使用EF时,想要比较字符串类型的日期时,参考以下: SQL语句: 1)select * from TableName where StartTime > ‘2015-04-08‘ 2)sele ...

  6. UVA - 1343 The Rotation Game (BFS/IDA*)

    题目链接 紫书例题. 首先附上我第一次bfs+剪枝TLE的版本: #include<bits/stdc++.h> using namespace std; typedef long lon ...

  7. 算法之python创建链表实现cache

    算法之python创建链表实现cache 本节内容 问题由来 解决思路 实现代码 总结 1. 问题由来 问题起因于朋友的一次面试题,面试公司直接给出两道题,要求四十八小时之内做出来,语言不限,做出来之 ...

  8. 在.net中读写config文件的各种方法(自定义config节点)

    http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - ...

  9. 关于Intellij IDEA导入jdk出现异常

    目前JDK出现的情况如下: 这里JavaJDK是有问题的,因为只有jre而没有JDK.正确做法是重新安装新的JDK. 正常的JDK下的目录是这样的: 选择jdk开头的文件夹就可以了.

  10. Python 函数之迭代器和生成器

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可 ...