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. MySQL InnoDB与MyISAM存储引擎差异

    言: 之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解: 差异: MyISAM 只支持表锁,不支持事务,表损坏率较高.较老的存储引擎.   ...

  2. gym强化学习入门demo——随机选取动作 其实有了这些动作和反馈值以后就可以用来训练DNN网络了

    # -*- coding: utf-8 -*- import gym import time env = gym.make('CartPole-v0') observation = env.reset ...

  3. NAT123之类的软件是如何实现访问域名然后穿透到内网主机的80端口?——有公网ip就是动态域名解析,没有就是穿透+代理转发

    实际上两种都用到了:1,服务提供商(123NAT,花生壳)做Proxy转发 2,两个私网地址直接连接:STUN 和TURN 使用动态域名解析还是端口映射   什么情况下使用动态域名解析?什么情况下使用 ...

  4. (转) Android Service完全解析,关于服务你所需知道的一切(上)

    相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...

  5. MySQL分片 --转自Peter Zaitsev对MySQL分片的建议

    本文作者Peter Zaitsev是知名数据库专家,2006年联合创立了Percona.负责维护网站“MySQL性能”.同时,他也是<高性能MySQL>一书的联合作者.以下是他对MySQL ...

  6. HDU - 5306: Gorgeous Sequence (势能线段树)

    There is a sequence aa of length nn. We use aiai to denote the ii-th element in this sequence. You s ...

  7. Why getting this error “django.db.utils.OperationalError: (1050, ”Table 'someTable' already exists“)”

    0down votefavorite   I am getting error like django.db.utils.OperationalError: (1050, "Table 's ...

  8. 一步一步使用webpack+react+scss脚手架重构项目

    前几天做了一个项目:[node]记录项目的开始与完成——pipeline_kafka流式数据库管理项目:因为开发时间紧迫,浅略的使用了一下react,感觉这个ui库非常的符合我的口味,现在趁着有空闲时 ...

  9. webpack 故障处理

    Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段. 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到.我们还可以通过参数 --display ...

  10. php用zendstudio建立wsdl

    首先,新建的时候要选择soap,然后deocument和rpc都可以. 类和方法的页面: <?php //发货接口 class test{ function send_do_delivery($ ...