jdk21尚未正式发布,但其备受关注的亮点-虚拟线程,对于提升IO密集型程序的吞吐量效果明显。
在主流的微服务架构中,特别是BI服务,常常会调用不同服务的FeignClient用以统计数据,旧版本的jdk中,涉及上下文切换的多线程实现通常采用线程池+Future、CompletableFuture等类异步编排。
由于旧版本的jdk中,Java只是封装了操作系统底层的线程调度接口,所以异步编程往往受限于cpu调度线程数,且线程资源和cpu大量浪费于阻塞等待上。
虚拟线程为此带来了福音
平台线程:实现了Runnable接口的Thread 类的每个实例,都是平台线程,是 Java 对操作系统线程的包装
虚拟线程:一种由 JVM 管理的轻量级线程。对应实例为VirtualThread
官网介绍中,虚拟线程是由 Java 虚拟机调度,而不是操作系统。虚拟线程占用空间小,同时使用轻量级的任务队列来调度虚拟线程,避免了线程间基于内核的上下文切换带来的开销,因此可以极大量、高效地创建和使用
io密集型的程序中,虚拟线程能否完全替代平台线程?
平台线程池是否会在一定程度上成为过去式?
jdk21尚未正式发布,让我们拭目以待