[英]Java Timer.schedule task doesn't run at all
我有這個:
import java.util.Timer;
import java.util.TimerTask;
public class useTimerTask {
public static void main(String[] args){
Timer timer = new Timer(true);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("abc");
}
}, 200000 , 1000);
}
}
我預計在運行此程序后,屏幕上會有定期輸出。 但是當我在intelliJ中運行它時,似乎它立即完成而沒有打印任何東西。
發生了什么? 怎么解決?
首先,您需要從Timer的構造函數中刪除該參數。 通過傳遞true
您指定該線程是“deamon”:守護程序線程不會阻止JVM在所有非守護程序線程完成時退出。
第二件事是你將延遲參數設置為200分鍾。 這意味着您必須在程序開始重復println之前等待200分鍾。 以下是工作版本:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("abc");
}
}, 100 , 1000);
如果將Timer設置為deamon,JVM將看到沒有活動線程,並且在調度計時器的指令完成時停止終止程序。 但是如果從Timer構造函數中刪除參數“true”,它將作為活動線程顯示,這意味着程序在該計時器完成其工作之前不會停止。
下面的代碼顯示了這種情況 計時器將工作10秒,因為你睡覺主線程和計時器(deamon)將工作,直到這個睡眠結束。
Timer timer = new Timer(true);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("abc");
}
}, 100 , 1000);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.