package com.dldw.common.concurrent;
import java.time.Duration;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;
/**
* @author gaodd
* @version 1.0
* @description 虚拟线程
* 虚拟线程总是守护线程无法改变
* 虚拟线程代价便宜 无需共享
* 虚拟线程不是线程组的活动成员
* 虚拟线程有固定的优先级 Thread.setPriority(int)方法对虚拟线程无作用
* 虚拟线程现在始终支持线程局部变量
* @date 2023/12/7 15:06
**/
public class VirtualThreadDemo {
public static void main(String[] args) {
// 基于Executors 开启10000个虚拟线程
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i -> {
executor.submit(() -> {
Thread.sleep(Duration.ofSeconds(1));
return i;
});
});
} // executor.close() is called implicitly, and waits
// 基于Thread.builder 使用虚拟线程
Thread.Builder builder = Thread.ofVirtual().name("worker-");
builder.start(() -> {
});
}
}
jdk21 虚拟线程打开的2种方式
于 2023-12-15 16:20:54 首次发布