Joe*_*Joe -1 java multithreading executorservice
我有一个简短的 java 程序,它创建了一个单线程调度执行器,并调度了一个任务。
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.schedule(cloudWatchReporter, accumulateForMillis, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
在预定时间到来之前,我的主线程结束,JVM 退出。我原以为它会在关闭之前等待计时器完成并执行计划任务。这不是发生的事情。如果我在主线程结束之前添加了足够的睡眠,那么我的任务将在 JVM 关闭之前执行。
Executors 是否有管理计时器的主线程?还是通过其他方式实现了定时器效果?如果由某个主线程管理,它是守护线程还是非守护线程?
这个简单的完整示例与您在问题中声称的内容相矛盾:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
运行它,你会看到不仅消息在 10 秒后打印出来,而且程序并没有退出。所以你的主线程并没有简单地结束。你可能会打电话给System.exit()。