基本特性,前提知識
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;
}
}