Java Timer.schedule 任务根本 运行

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

如果您将定时器设置为守护进程,JVM 将看到没有活动线程,并在调度定时器的指令完成时停止终止您的程序。但是如果你从 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();
    }