Java: 虚拟线程来了

java标志
image-3349

类似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;
                      }));
    }
  }
}