繁体   English   中英

ScheduledExecutorService 在执行虚拟线程之前退出

[英]ScheduledExecutorService exiting before executing virtual thread

尝试使用 java 19 虚拟线程进行试验时,我遇到了异常行为,下面的代码与平台线程完美配合。 但是当我切换到虚拟线程时它突然退出。 添加 while(true); 最后解决了问题,程序不断打印“你好”。 是否可以将虚拟线程与 ScheduledExecutorService 一起使用?

        ThreadFactory factory = Thread.ofVirtual().factory();
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(factory);
            scheduledExecutorService.scheduleAtFixedRate(() -> {
                System.out.println("hello");
            }, 0, 5000, TimeUnit.MILLISECONDS);
    }
   //while(true);

文档中

虚拟线程是守护线程,因此不会阻止 Java 虚拟机终止。

这似乎是绝对的; 没有办法使虚拟线程成为非守护进程

因此,如果您想使用一个使用虚拟线程的线程池(已安排或未安排),那么您需要确保至少有一个非守护程序平台线程在您需要时保持活动状态。 你的while (true); 循环目前这样做,但在某种程度上我强烈反对; 即使休眠线程也会更好,但仍然不是很好。 在更复杂的应用程序中,如服务器或桌面应用程序,您可能有一个或多个非守护线程无论如何都在工作(例如,桌面应用程序中的“事件循环”),这将使 JVM 保持活动状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM