簡體   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