2023年9月19日,Oracle正式发布了JDK21。
JDK21是一个长期支持版本(上一个LTS版本是JDK17,Oracle将LTS版本的发布时间从3年改为了2年),包含了众多新特性,其中最重磅的莫过于虚拟线程(Virtual Threads)。使用虚拟线程,在不改变原来的编程风格的前提下,只需少量改动,就可以极大地提高系统的吞吐量。让我们从Java线程模型的发展、如何使用虚拟线程及性能对比来探一探虚拟线程吧!
1、Java线程模型
在早期JDK 1.2以前的Sun Classic虚拟机上Java线程是基于一种被称为“绿色线程”的用户线程(User Thread)实现的。用户线程完全建立在用户空间,系统内核不能感知用户线程的存在。用户线程的建立、同步、调度和销毁完全在用户态中完成,因此操作可以是非常快速且低消耗的,能够支持规模更大的线程数量。同时也因为没有系统内核支持,操作系统只负责把处理器资源分配到进程,线程的所有操作都需要程序自己去处理,比如“阻塞如何处理”、“多处理器系统中如何将线程映射到其他处理器上”等等,这些问题解决起来比较困难,使用用户线程实现的程序一般比较复杂(很多程序依赖特定的线程库来完成基本的线程操作,这些复杂性都封装在线程库之中)。因此Java在JDK1.2之后放弃了用户线程。