首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在执行虚拟线程之前退出ScheduledExecutorService

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

Stack Overflow用户
提问于 2022-06-03 16:16:00
回答 1查看 106关注 0票数 0

在尝试使用java 19虚拟线程时,我面临着一种不寻常的行为,下面的代码与平台线程完美地工作在一起。但当我切换到虚拟线程时,它就会突然退出。添加while(true);最后解决问题,程序继续打印"hello“。是否可以在ScheduledExecutorService中使用虚拟线程?

代码语言:javascript
复制
        ThreadFactory factory = Thread.ofVirtual().factory();
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(factory);
            scheduledExecutorService.scheduleAtFixedRate(() -> {
                System.out.println("hello");
            }, 0, 5000, TimeUnit.MILLISECONDS);
    }
   //while(true);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-03 18:09:27

来自文献资料

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72492444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档