虚拟线程-概述
JDK19实验、JDK21 以后上线 的新功能
基于ForkJoinPool,支持ThreadLocal、线程中断
注意事项
仅适合运行有大量io阻塞的任务,不适合CPU密集型任务
避免使用ThreadLocal
注意虚拟线程固定(pinned)的情况(使用Synchorized、使用native方法)
平迁虚拟线程,不会影响现有现成逻辑的正确性,但可能会影响性能
原理
线程模型
线程需要被调度才能执行任务,本质上是分配到CPU上执行。对于由操作系统线程实现的平台线程,JDK 依赖于操作系统中的调度程序;而对于虚拟线程,JDK 先将虚拟线程分配给平台线程,然后平台线程按照通常的方式由操作系统进行调度。
JDK 的虚拟线程调度器是一个以 FIFO 模式运行的 ForkJoinPool,调度器的默认并行度是可用于调度虚拟线程的平台线程数量,并行度可以通过设置启动参数调整。
基于ForkJoinPool
StructuredTaskScope
原理
参考
1、https://juejin.cn/post/7280746515526058038?searchId=20240706160706A3E3F95BE22DA3D11B4E