类似Go语言的协程,在用户线程上执行更多操作.该特性在JDK 19中进行预览,具体可以参考: JEP 425: Virtual Threads (Preview)
先在https://jdk.java.net/ 下载安装JDK 19 .然后编译:
1 | D:\jdk19\bin\java --source 19 --enable-preview Main.java |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import java.time.Duration; import java.util.concurrent.Executors; import java.util.stream.IntStream; public class MainTest { public static void main(String[] args) { try (var executor = Executors.newVirtualThreadPerTaskExecutor()) { Thread.ofVirtual() .name("virtual Thread") .unstarted( () -> { System.out.println("线程名称: " + Thread.currentThread().getName()); System.out.println("是否虚拟线程: " + Thread.currentThread().isVirtual()); System.out.println("------------------------------------------"); }) .start(); IntStream.range(0, 10_000) .forEach( i -> executor.submit( () -> { Thread.sleep(Duration.ofSeconds(1)); var currentThread = Thread.currentThread(); System.out.println( "是否为虚拟线程: " + currentThread.isVirtual() + ",线程名称: " + currentThread.getName() + ",当前: " + i); return i; })); } } } |