今天学习了Timer控件,主要的方法是多少秒后执行,和每隔多少秒执行一次。
另外一个思想就是:想循环往复的执行,就在一个Timer执行的任务中new新的Timer。
package com.meiran;
import org.junit.Test;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* 时间控件
*/
public class TimerTest {
@Test
public void test() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("bomb!");
}
};
//2秒后执行run()
timer.schedule(task, 2000);
//如果不循环,main方法线程执行完毕后,JVM停止而无法看到Timer2秒后的执行。
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Test
public void test2() {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("bomb!");
}
};
//2秒后执行run(),并每隔2秒执行一次
timer.schedule(task, 2000, 2000);
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 每隔两秒执行一次,再隔四秒执行一次,交替循环进行
*/
@Test
public void test3() {
Timer timer = new Timer();
TimerTask task = new MyTimerTask();
timer.schedule(task, 2000);
while (true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private int count = 0;
class MyTimerTask extends TimerTask {
@Override
public void run() {
count = (count + 1) % 2;
System.out.println("bomb!");
Timer timer = new Timer();
TimerTask task = new MyTimerTask();
timer.schedule(task, 2000 + 2000 * count);
}
}
}