我有这个:
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中运行它时,它似乎立即完成而无需打印任何内容。
发生了什么事?如何解决?
答案 0 :(得分:3)
首先,您需要从Timer的构造函数中删除该参数。通过传递true
,您可以指定线程为“守护进程”:当所有非守护程序线程完成时,守护程序线程不会阻止JVM退出。
第二件事是将delay参数设置为200分钟。这意味着您必须等待200分钟,程序才能开始重复println。 下面是工作版本:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("abc");
}
}, 100 , 1000);
如果将Timer设置为守护进程,则JVM将看到没有活动线程,并且仅在调度Timer指令完成后停止终止程序。但是,如果您从Timer构造函数中删除参数“ true”,它将显示为活动线程,这意味着程序将在该计时器完成其工作之前停止。
下面的代码显示了这种情况。计时器将工作10秒钟,因为您正在休眠主线程,而计时器(守护进程)将一直工作到此睡眠完成。
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();
}