Java Timer.schedule任务根本不运行

时间:2018-11-30 13:40:07

标签: 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 void run() {
                    System.out.println("abc");
                }
            }, 200000 , 1000);
        }
    }

我希望运行此程序后,屏幕上会出现定期输出。但是当我在intelliJ中运行它时,它似乎立即完成而无需打印任何内容。

发生了什么事?如何解决?

1 个答案:

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