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();
    }

我认为
计时器是非阻塞的,主线程立即停止。显示了一个带有锁定/阻塞对象的解决方案,共享错误日志将有助于找到解决方案您必须在主线程中等待计时器