Java Timer.schedule任务不';我根本不跑
我有这个:Java Timer.schedule任务不';我根本不跑,java,timer,task,schedule,Java,Timer,Task,Schedule,我有这个: 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
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中运行它时,它似乎立即完成,而不打印任何内容
发生了什么事?如何修复它?首先,需要从计时器的构造函数中删除该参数。通过传递
true
可以指定线程是“deamon”:守护进程线程不会阻止JVM在所有非守护进程线程完成时退出
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();
}
第二件事是将延迟参数设置为200分钟。这意味着在程序开始重复println之前,您必须等待200分钟。
以下是工作版本:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("abc");
}
}, 100 , 1000);
如果将计时器设置为deamon,JVM将看到没有活动线程,并在调度计时器的指令完成后停止终止程序。但若您从计时器构造函数中删除参数“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();
}
我认为
计时器是非阻塞的,主线程立即停止。显示了一个带有锁定/阻塞对象的解决方案,共享错误日志将有助于找到解决方案您必须在主线程中等待计时器