schedule与scheduleAtFixedRate比较
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比较的更多相关文章
- schedule() 和 scheduleAtFixedRate() 区别
1. schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...
- schedule和scheduleAtFixedRate区别
需求: 由于系统长期运作,各设备之间产生很多信息,一段时间后需要清除数据 考虑方案: 用schedule还是scheduleAtFixedRate,在此比较分析了下这两个的区别 schedule和sc ...
- schedule() 和 scheduleAtFixedRate() 的区别--转载
1. schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...
- 简单理解java中timer的schedule和scheduleAtFixedRate方法的区别
timer的schedule和scheduleAtFixedRate方法一般情况下是没什么区别的,只在某个情况出现时会有区别--当前任务没有来得及完成下次任务又交到手上. 我们来举个例子: 暑假到了老 ...
- Timer类的schedule和scheduleAtFixedRate 简单应用
Timer类可以用作定时任务,主要的方法有schedule和scheduleAtFixedRate. schedule(TimerTask task, Date time) 安排在指定的时间执行指定的 ...
- Timer的schedule和scheduleAtFixedRate方法的区别解析(转)
在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...
- Timer的schedule和scheduleAtFixedRate方法的区别解析
在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...
- Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)
package com.thread.test.thread; import java.util.Timer; import java.util.TimerTask; import java.util ...
- schedule vs scheduleAtFixedRate
最好的方法是在两者之间区分 timer灵感时间设定过去时间T,scheduleAtFixedRate将从T现在所有的任务中运行,schedule而该任务将只运行从现在开始计时. public clas ...
随机推荐
- 【Prism】MEF版HelloWorld
引言 Pirsm框架是由微软P & P小组设计的,用于构建组合式的WPF企业级应用,支持两个IOC容器,分别为Unity和MEF.官方地址为http://compositewpf.codepl ...
- python--关于if __name__==__main__的解释
在解释之前首先我们看下__name__这个变量存的是什么: #!/usr/bin/env python # -*- coding:utf-8 -*- print(__name__) 结果: __mai ...
- java学习笔记 --- 网络编程(网络的基础知识)
1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...
- uva120 Stacks of Flapjacks (构造法)
这个题没什么算法,就是想出怎么把答案构造出来就行. 思路:越大的越放在底端,那么每次就找出还没搞定的最大的,把它移到当前还没定好的那些位置的最底端,定好的就不用管了. 这道题要处理好输入,每次输入的一 ...
- C++继承细节 -1
为什么基类析构函数最好要使用 virtual 进行修饰? class A { private: ...... public: ~A(); A() {} }; class B : public A { ...
- CodeForces - 827A:String Reconstruction (基础并查集)
Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun ...
- Cash Machine(多重背包二进制转换)
个人心得:多重背包,自己根据转换方程写总是TLE,后面去网上看了二进制转换,不太理解: 后面仔细想了下,用自己的思想理解下把,就是将对应number,cash总和用二进制拆分, 然后全部装入到一个数组 ...
- Python函数-dir()
dir([object])函数 作用: 没有参数,返回当前本地范围内的名称列表.使用参数,试图返回该对象的有效属性的列表. 说明: 默认dir()机制表现出有不同类型的对象,因为它试图产生最相关的,而 ...
- xmind的使用及入门
初识 xmind是什么 比较 入门 下载 基本操作 主界面 美化 工具 导出 初识 xmind是什么 说白了就是传说中的思维导图,用它我们可以画出下面这些图: 额,这张图好丑. 好吧,换一张: 他就是 ...
- linux 定时备份mysql
定时备份:1.创建备份文件存放目录2.创建备份脚本backup.sh #!/bin/bash DBUser=db_backDBPasswd=passwordDBName=db_nameSERVER=l ...