大鹏111
这打印的两个时间间隔是main函数打印的第一条,第二条是MyTimerTask里面打印的,这里间隔两秒,与设置的1s时间无关
慕工程4835570
你是怎么触发
handleRemind
这个方法的?
慕盖茨1413546
发现了
delay=data
慕粉2248088296
实际执行语句的时间 晚于 设置的timer开始时间:scheduleAtFixedRate会补上应该执行的次数(以连续执行的方式,在实际上第一次执行的时候),schedule错过了的次数不补。
如果任务的耗时超过设置的时间间隔:scheduleAtFixedRate会严格按照时间点执行(于是任务并行执行着),而schedule上一个任务什么时候完成什么时候执行下一任误才执行(无视延迟,串行执行)
好吧,我知道你没看懂,我写的我也看不懂,举例子:
第一个区别: ScheduleAtFixedRate同学旷课两天,一来到学校,就把前两天的课共计16节给补上了,并且今天该上的课也按时上了。Schedule同学也旷了两天课,一来学校,就像自己没旷课一样,今天的课按时上,昨天和前天的课不管了。
第二个区别:ScheduleAtFixedRate写作业是按时点的,安排5点整写英语,六点整写数学,7点整写历史,如果到6点整英语还没写完,就英语和数学一块写。Schedule同学写作业的时间安排相同,不同的是5点开始写的英语到6点还没写完,他就继续写英语,啥时候英语作业写完了,再啥时候写数学。
mkmonkey
同学好,定时的话肯定会占用一定的内存的,同学感兴趣可以启动一个定时任务,然后查看它的进程状态便知。订餐系统的话一般的做法其实只需要一个线程池去定时轮询支付订单的时间是否超时,超时取消即可,不用单独为每个订单设置一个定时器,只需要每分钟轮询一下即可,quartz即可满足,具体需要同学去调研一下:)
SongNeil熊
MyTimerTask没有继承TimerTask类吧
weibo_不撞墙不知道南北_0
一三和二四的区别你应该明白,就是单次执行或者循环执行的区别。
一二和三四的区别就是一个是以起服务的时间为基准,一个是以某一个固定的时间点为基准,
qq_情殇_5
同学您好,请问教学里有什么东西看不明白的,可以直接在这里提问哈。如果从开始讲到最后都不明白的话可能需要有java一些常用知识储备,可以在网上找个java快速入门的资料看一下,如果有一定的程序设计基础的话,相信不到几个小时就能搞定啦
慕的地6384686
package com.may.seventy;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimerTask;
/**
* Created by junfeng on 17/5/17.
*/
public class MyTimerTask extends TimerTask {
private String name;
public MyTimerTask(String inputName){
name = inputName;
}
@Override
public void run() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current exec name is:"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}package com.may.seventy;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
/**
* Created by junfeng on 17/5/17.
*/
public class MyTimer {
public static void main(String[] args) {
Timer timer = new Timer();
MyTimerTask myTimerTask = new MyTimerTask("NO.1");
//timer.schedule(myTimerTask,1000L,5000l);
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sf.format(calendar.getTime()));
calendar.add(Calendar.SECOND,3);
// myTimerTask.setName("test1");
// timer.schedule(myTimerTask,calendar.getTime());
// myTimerTask.setName("test2");
// timer.schedule(myTimerTask,calendar.getTime(),3000);
myTimerTask.setName("test3");
timer.schedule(myTimerTask,2000);
}
}