我有这个简单的应用程序的Java定时器等待任务下一个任务之前完成开始
package testy;
import java.util.Timer;
import java.util.TimerTask;
import static testy.Test.log;
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws InterruptedException {
Timer timer = new Timer(true);
log("tasks start");
timer.schedule(new Task1(), 1,120000);
timer.schedule(new Task2(), 3000,120000);
timer.schedule(new Task3(), 6000,120000);
Thread.sleep(99999999L);
}
static void log(String text) {
System.out.println(text);
}
}
class Task1 extends TimerTask {
@Override
public void run() {
log("Task1 start");
try {
Thread.sleep(12000L);
} catch (InterruptedException ex) {
log("interupted");
}
log("Task1 end");
}
}
class Task2 extends TimerTask {
@Override
public void run() {
log("Task2 start");
try {
Thread.sleep(12000L);
} catch (InterruptedException ex) {
log("interupted");
}
log("Task2 end");
}
}
class Task3 extends TimerTask {
@Override
public void run() {
log("Task3 start");
try {
Thread.sleep(12000L);
} catch (InterruptedException ex) {
log("interupted");
}
log("Task3 end");
}
}
从这个代码,我想到的是任务1将被立即解雇和Task2将在3秒后发射(如延迟时间说的)。但是,Task2正在等待Task1完成并在此之后立即被触发。日志:
tasks start
Task1 start
Task1 end
Task2 start
Task2 end
Task3 start
Task3 end
Task1 start
Task1 end
Task2 start
Task2 end
Task3 start
Task3 end
据我了解Java定时器,任务应独立解雇。为什么然后这个应用程序的行为是不同的?如何在给定时间精确地完成启动任务,而不必关心Timer1是否完成?
感谢您的帮助!
我看到我得到了Timer的想法错误然后。标记为答复,因为doc引用。非常感谢! – user3597356