【发布时间】:2016-01-19 20:21:36
【问题描述】:
我有这个简单的应用程序
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");
}
}
从这段代码中,我希望 Task1 将立即被触发,而 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 Timer,任务应该独立触发。为什么这个应用程序的行为是不同的?如何在给定的时间精确地实现启动任务,而不关心 Timer1 是否完成?
感谢您的帮助!
【问题讨论】:
标签: java asynchronous timer