又是需要某个程序每隔一段时间运行一次,而且需要他自己运行,而不是需要程序员每隔一段时间运行一下,这是就需要用到TimerTask类,具体情况见下代码:
package dingshi;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class dingshi {
public static void main(String[] args) {
Timer timer = new Timer();
MyTask task = new MyTask();
//表示在1秒之后开始执行,并且每2秒执行一次
timer.schedule(task, 1000, 2000);
}
}
class MyTask extends TimerTask{
//在run方法中的语句就是定时任务执行时运行的语句。
public void run() {
System.out.println("Hello!! 现在是:" + new Date());
}
}
运行后的纯输出结果如下:
Hello!! 现在是:Wed Mar 13 21:01:57 CST 2019
Hello!! 现在是:Wed Mar 13 21:01:59 CST 2019
Hello!! 现在是:Wed Mar 13 21:02:01 CST 2019
Hello!! 现在是:Wed Mar 13 21:02:03 CST 2019
Hello!! 现在是:Wed Mar 13 21:02:05 CST 2019
Hello!! 现在是:Wed Mar 13 21:02:07 CST 2019
可以看出确实是每个两秒运行一下run()方法。
如果run()运行的事件超过了,设定的2秒,则run()运行完以后会接着运行,2秒就好像不再起作用了,如下,在run()方法中添加等待5秒的程序:
package dingshi;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class dingshi2 {
public static void main(String[] args) {
Timer timer = new Timer();
MyTask task = new MyTask();
//表示在1秒之后开始执行,并且每2秒执行一次
timer.schedule(task, 1000, 2000);
}
}
class MyTask extends TimerTask{
//在run方法中的语句就是定时任务执行时运行的语句。
public void run() {
System.out.println("Hello!! 现在是:" + new Date());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
那么结果会变成这样:
Hello!! 现在是:Wed Mar 13 21:06:07 CST 2019
Hello!! 现在是:Wed Mar 13 21:06:12 CST 2019
Hello!! 现在是:Wed Mar 13 21:06:17 CST 2019
Hello!! 现在是:Wed Mar 13 21:06:22 CST 2019
Hello!! 现在是:Wed Mar 13 21:06:27 CST 2019