我有這個簡單的應用程序的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