Java执行程序是否在守护程序线程中运行?

问题描述 投票:-1回答:1

我有一个简短的java程序,它创建了一个单线程计划执行程序,我安排了一个任务。

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();

scheduledExecutorService.schedule(cloudWatchReporter, accumulateForMillis, TimeUnit.MILLISECONDS);

在预定的时间到来之前,我的主线程结束了,JVM退出了。我原本以为它会等待计时器完成并且计划的任务在关闭之前执行。这不是发生的事情。如果我在主线程结束之前添加了足够的睡眠,那么我的任务将在JVM关闭之前执行。

执行者有一个管理计时器的主线程吗?或者以其他方式实现计时器效果?如果由某个主线程管理,它是守护程序线程还是非守护程序线程?

java multithreading executorservice
1个回答
4
投票

这个简单的完整示例与您在问题中声称的内容相矛盾:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

class Test {

    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService.schedule(() -> System.out.println("hello"), 10, TimeUnit.SECONDS);
    }
}

运行它,您将看到不仅在10秒后打印消息,而且程序不会退出。所以你的主要线程并没有简单地结束。你可能会打电话给System.exit()

© www.soinside.com 2019 - 2024. All rights reserved.