java 虚拟线程

名词

  • 平台线程:Java传统java.lang.Thread 实例线程概念
  • 虚拟线程:JDK19后引入的新的线程概念,不独占底层操作系统线程,为解决高吞吐量、高并发场景由JDK创新调度的虚拟线程。

平台线程和虚拟线程

虚拟线程----M:N—平台线程—1:1----操作系统线程

  • 平台线程的调度依赖于操作系统中的调度程序。虚拟线程的调度线程由JDK自己的调度程序调试, JDK的调度程序不是直接将虚拟线程分配给处理器,而是将虚拟线程分配给平台线程。
  • 被调度程序分配的平台线程是虚拟线程的载体,但调度程序不维护两者间的关联,即虚拟线程在其生命周期内会挂载在不同的载体上,多个虚拟线程会被调度到多个平台线程,即M:N调试
  • 平台线程是操作系统线程的包装器实现(1:1调度), 即一个平台线程对应操作系统的一个线程,平台线程数受限于操作系统的线程数。虚拟线程采用 M:N 调度,其中大量 (M) 的虚拟线程计划在较少数量的 (N) 个操作系统线程上运行。
  • 平台线程和虚拟线程的堆栈是分开的,双方看不到对方的堆栈中的局部变量

线程池化

  • 平台线程的创建非常一般使用线程池的方式使用。
  • 虚拟线程的创建非常便宜,永远不需要池化它们。

线程使用

线程创建方式

  • 平台线程
//ofPlatform方式
Thread.ofPlatform().start(()->{
    System.out.println(Thread.currentThread());
});

  • 虚拟线程使用
//ofVirtual方式
Thread.ofVirtual().start(()->{
    System.out.println(Thread.currentThread());
});


//Executors方式
var executorService = Executors.newVirtualThreadPerTaskExecutor();
executorService.execute(() -> {
    System.out.println(Thread.currentThread());
});

//startVirtualThread方式
Thread.startVirtualThread(() -> {
    Thread current = Thread.currentThread();
    System.out.println(current);
    System.out.println(current.isVirtual());
});
  • isVirtual判断是否是虚拟线程
Thread current = Thread.currentThread();
System.out.println(current.isVirtual());

springboot3使用虚拟线程

  • 配置启动虚拟线程
spring:
  thread-executor: virtual  #启动虚拟线程的必须配置
  • 应用@EnableAsync在Spring应用程序中启用异步方法的支持
@EnableAsync
@SpringBootApplication
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
  • 通过将@Async注解应用于方法上,可以将该方法标记为一个异步方法
@Service
public class AsyncService {
    private static final Log log = LogFactory.getLog(AsyncService.class);

    @Async
    public void doSomething(CountDownLatch countDownLatch) {
        log.info(Thread.currentThread());
        try {
            Thread.sleep(50);
        } catch (InterruptedException ie) {
            ie.printStackTrace();
        }
        countDownLatch.countDown();
    }
}

参考资料

Open JDK JEP 425

Java终于开始引入虚拟线程(协程)了

springboot3 + java虚拟线程初体验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值