JDK21引入,轻量级,适用于高并发IO密集型场景

传统线程弊端:

  • 创建成本高
  • 内存占用大(默认栈空间约1MB)
  • 数量有限

        当需要大量进行IO时,线程大部分时间处于等待I/O的阻塞状态,什么也没有去干,从而浪费了系统大量的资源。这种线程叫做“平台线程”

        有了解过操作系统的同学应该知道,当线程处于阻塞状态时,我们可以选择挂起线程,并切换用户级线程,可以避免频繁的内核线程切换开销,从而提高并发能力。接下来我们学习的虚拟线程与该用户线程的使用也有许多相似之处。

虚拟线程:

使用方法:

Thread.startVirtualThread(() -> {
    System.out.println("hello");
});
ExecutorService executor =
        Executors.newVirtualThreadPerTaskExecutor();

基本原理:

        JVM发现当前线程正在阻塞,会选择立即挂起虚拟线程,释放底层平台线程,再让当前的平台现场去干别的工作。这样当进行IO密集型工作时,使用虚拟线程能大幅提升系统性能。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐