背景
2022-09-20,JDK 19 发布了GA版本,备受瞩目的协程功能也算尘埃落地,不过,此次 GA版本并不是以协程来命名,而是使用了 Virtual
Thread(虚拟线程),并且是 preview预览版本。小编最早关注到协程功能是在 2020年,那时孵化项目叫做 Java project Loom,
使用的是 Fiber(直译为:纤维,意译为:轻量级线程,即协程),但是 GA版本为何最终被定义为 Virtual Thread(虚拟线程),原因不得而知。
GA: General Availability,正式发布的版本,在国外都是用 GA来指代 release版本;
JEP: JDK Enhancement Proposal, JDK增强建议,JEP是一个JDK核心技术相关的增强建议文档;
为什么需要虚拟线程
既然 Java官方推出一个和线程这么相近的概念,必定是要解决线程的某些问题,因此,我们先回顾下线程的一些特点:
- Java中的线程是对操作系统线程的一个简单包装,线程的创建,调度和销毁等都是由操作系统完成;
- 线程切换需要消耗CPU时间,这部分时间是与业务无关的;
- 线程的性能直接受操作系统处理能力的影响;
因此,线程是一种重量级的资源,作为一名 Java程序员应该深有体会。所以,为了更好的管理线程,Java采用了池化(线程池)的方式进行管理线程,避免线程频繁创建和销毁带来的开销。但是,尽管线程池避免线程大部分创建和销毁的开销,但是线程的调度还是直接受操作系统的影响,那么有没有更好的方式来打破这种限制,因此,虚拟线程就孕育而生。
在 JDK 19源码中,官方直接在 java.lang包下新增一个 VirtualThread类来表示虚拟线程,为了更好的区分虚拟线程和原有的 Thread线程,官方给 Thread类赋予了一个高大上的名字:平台线程。
下面给出了 JDK 19中虚拟线程的 Diagram截图以及平台线程和系统线程的关系图:
背景
2022-09-20,JDK 19 发布了GA版本,备受瞩目的协程功能也算尘埃落地,不过,此次 GA版本并不是以协程来命名,而是使用了 Virtual
Thread(虚拟线程),并且是 preview预览版本。小编最早关注到协程功能是在 2020年,那时孵化项目叫做 Java project Loom,
使用的是 Fiber(直译为:纤维,意译为:轻量级线程,即协程),但是 GA版本为何最终被定义为 Virtual Thread(虚拟线程),原因不得而知。
GA: General Availability,正式发布的版本,在国外都是用 GA来指代 release版本;
JEP: JDK Enhancement Proposal, JDK增强建议,JEP是一个JDK核心技术相关的增强建议文档;
为什么需要虚拟线程
既然 Java官方推出一个和线程这么相近的概念,必定是要解决线程的某些问题,因此,我们先回顾下线程的一些特点:
- Java中的线程是对操作系统线程的一个简单包装,线程的创建,调度和销毁等都是由操作系统完成;
- 线程切换需要消耗CPU时间,这部分时间是与业务无关的;
- 线程的性能直接受操作系统处理能力的影响;
因此,线程是一种重量级的资源,作为一名 Java程序员应该深有体会。所以,为了更好的管理线程,Java采用了池化(线程池)的方式进行管理线程,避免线程频繁创建和销毁带来的开销。但是,尽管线程池避免线程大部分创建和销毁的开销,但是线程的调度还是直接受操作系统的影响,那么有没有更好的方式来打破这种限制,因此,虚拟线程就孕育而生。
在 JDK 19源码中,官方直接在 java.lang包下新增一个 VirtualThread类来表示虚拟线程,为了更好的区分虚拟线程和原有的 Thread线程,官方给 Thread类赋予了一个高大上的名字:平台线程。
下面给出了 JDK 19中虚拟线程的 Diagram截图以及平台线程和系统线程的关系图:
背景
2022-09-20,JDK 19 发布了GA版本,备受瞩目的协程功能也算尘埃落地,不过,此次 GA版本并不是以协程来命名,而是使用了 Virtual
Thread(虚拟线程),并且是 preview预览版本。小编最早关注到协程功能是在 2020年,那时孵化项目叫做 Java project Loom,
使用的是 Fiber(直译为:纤维,意译为:轻量级线程,即协程),但是 GA版本为何最终被定义为 Virtual Thread(虚拟线程),原因不得而知。
GA: General Availability,正式发布的版本,在国外都是用 GA来指代 release版本;
JEP: JDK Enhancement Proposal, JDK增强建议,JEP是一个JDK核心技术相关的增强建议文档;
为什么需要虚拟线程
既然 Java官方推出一个和线程这么相近的概念,必定是要解决线程的某些问题,因此,我们先回顾下线程的一些特点:
- Java中的线程是对操作系统线程的一个简单包装,线程的创建,调度和销毁等都是由操作系统完成;
- 线程切换需要消耗CPU时间,这部分时间是与业务无关的;
- 线程的性能直接受操作系统处理能力的影响;
因此,线程是一种重量级的资源,作为一名 Java程序员应该深有体会。所以,为了更好的管理线程,Java采用了池化(线程池)的方式进行管理线程,避免线程频繁创建和销毁带来的开销。但是,尽管线程池避免线程大部分创建和销毁的开销,但是线程的调度还是直接受操作系统的影响,那么有没有更好的方式来打破这种限制,因此,虚拟线程就孕育而生。
在 JDK 19源码中,官方直接在 java.lang包下新增一个 VirtualThread类来表示虚拟线程,为了更好的区分虚拟线程和原有的 Thread线程,官方给 Thread类赋予了一个高大上的名字:平台线程。
下面给出了 JDK 19中虚拟线程的 Diagram截图以及平台线程和系统线程的关系图: