Java定时器线程操作

jas*_*hdf 5 java

我正在使用计时器线程来运行简单的打印功能。问题是,如果我将延迟时间设置为 1000 毫秒,程序就会直接退出,没有任何输出。

但如果我改成100ms,程序就可以了。

public class TimerTaskTest01 {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new MyTask(), 1000);
    }
}
class MyTask extends TimerTask {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello World... ");
        }
        System.out.println("END");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想也许主线程运行得太快了。但有没有人能告诉我,我的说法是对还是错……

Mic*_*nic 3

实际上,无论计划的超时如何,您的应用程序可能仍在运行(或应该运行)。根据 JavaDocs Timer使用默认构造函数创建将创建一个用户线程,因此它“能够防止应用程序终止”。

如果您使用调试器运行应用程序,您应该看到计时器线程在后台保持活动状态,如下所示

线程[Timer-0](正在运行)

更改为Timer使用守护线程

Timer timer = new Timer(true);
Run Code Online (Sandbox Code Playgroud)

将显示线程实际上在main()完成后立即与程序的其余部分一起终止:

终止,退出值 0

使用ideone尝试代码还可以验证程序不会在 后终止main(),而是继续执行,直到 JVM 终止(有内置的五秒超时),之后打印预期的输出。

是否在计划时间或应用程序退出时打印输出,可能取决于底层操作系统和 JVM。