java 21 虛擬執行緒初體驗

度一川發表於2024-04-25

基本特性,前提知識

https://openjdk.org/jeps/444

https://www.cnblogs.com/didispace/p/17735173.html

不適應場景

java 21不適合 CPU 密集計算型任務,不過絕大多數的使用都不會是cpu密集計算場景🐶。

初體驗

任務描述:

一共有三個任務,任務三的值需要任務一和任務二的結果,並且任務三有500ms的超時時間,一但超時直接返回。

程式碼實現:

import java.util.concurrent.*;
 
public class VirtualTest {
    public static void main(String[] args) throws Exception {
        final ExecutorService virtualExecutor = Executors.newVirtualThreadPerTaskExecutor();
        DataDto dataDto = new DataDto();
        // 任務一
        var futurePre = virtualExecutor.submit(()->{
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            dataDto.num1 = 10;
        });
        // 任務二
        var futureNext = virtualExecutor.submit(()->{
            try {
                futurePre.get();
                Thread.sleep(1000);
                dataDto.num2 = dataDto.num1+5;
            } catch (InterruptedException | ExecutionException e) {
                throw new RuntimeException(e);
            }
        });
        // 任務三
        var futureEnd = virtualExecutor.submit(()->{
            try {
                futureNext.get();
                futurePre.get();
                dataDto.sum = dataDto.num1+ dataDto.num2;
            } catch (InterruptedException | ExecutionException e) {
                throw new RuntimeException(e);
            }
        });
        try {
            // 設定超時時間
            futureEnd.get(500,TimeUnit.MILLISECONDS);
            System.out.println(dataDto.sum);
        }catch (Exception e){
            System.out.println("執行緒超時");
        }
    }
    // 資料暫存地址
    static class DataDto{
        public Integer num1;
        public Integer num2;
        public Integer sum;
    }
}

相關文章