在尝试使用java 19虚拟线程时,我面临着一种不寻常的行为,下面的代码与平台线程完美地工作在一起。但当我切换到虚拟线程时,它就会突然退出。添加while(true);最后解决问题,程序继续打印"hello“。是否可以在ScheduledExecutorService中使用虚拟线程?
ThreadFactory factory = Thread.ofVirtual().factory();
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(factory);
scheduledExecutorService.scheduleAtFixedRate(() -> {
System.out.println("hello");
}, 0, 5000, TimeUnit.MILLISECONDS);
}
//while(true);发布于 2022-06-03 18:09:27
来自文献资料
虚拟线程是守护进程线程,因此不阻止Java虚拟机终止。
这似乎是绝对的;没有办法使一个虚拟线程非守护进程。
因此,如果您想使用使用虚拟线程的线程池(计划与否),那么您需要确保至少有一个非守护进程平台线程在您需要的时间内仍然有效。您的while (true);循环目前是这样做的,但在某种程度上我强烈反对;即使是休眠线程也会更好,尽管仍然不是很好。在更复杂的应用程序(如服务器或桌面应用程序)中,可能会有一个或多个非守护进程线程在工作(例如,桌面应用程序中的“事件循环”),这将使JVM保持活力。
https://stackoverflow.com/questions/72492444
复制相似问题