先说,优缺点:
优点:
- 非常轻量级:可以在单个线程中创建成百上千个虚拟线程而不会导致过多的线程创建和上下文切换。
- 简化异步编程: 虚拟线程可以简化异步编程,使代码更易于理解和维护。它可以将异步代码编写得更像同步代码,避免了回调地狱。
- 减少资源开销: 由于虚拟线程是由 JVM 实现的,它能够更高效地利用底层资源,例如 CPU 和内存。虚拟线程的上下文切换比平台线程更轻量,因此能够更好地支持高并发场景。
缺点:
- 不适用于计算密集型任务: 虚拟线程适用于 I/O 密集型任务,但不适用于计算密集型任务,因为密集型计算始终需要 CPU 资源作为支持。
从虚拟线程的优缺点可以知道它和平台线程的区别在哪?
类型 | 平台线程(Platform Thread) | 虚拟线程(Virtual Thread) |
---|---|---|
本质 | 操作系统线程的封装,由 操作系统调度器 管理。 | JVM 内部的逻辑线程,由 JVM 调度器 管理。 |
资源占用 | 每个平台线程占用操作系统资源(如线程栈、CPU 时间片)。 | 虚拟线程仅占用少量 JVM 内存(如线程状态信息),几乎无资源开销。 |
生命周期 | 与操作系统线程绑定,生命周期由 OS 控制。 | 由 JVM 调度器动态创建和回收,无需绑定特定 OS 线程。 |
适用场景 | 执行 CPU 密集型任务 或需要直接操作 OS 资源的场景。 | 处理 I/O 阻塞操作 或需要高并发的场景。 |
总的来说:平台线程也就是没有虚拟线程之前,我们一直使用的线程。JVM 调度程序通过平台线程(载体线程)来管理虚拟线程,因为
- 虚拟线程的代码必须运行在 平台线程 上。
一个平台线程可以在不同的时间执行不同的虚拟线程(多个虚拟线程挂载在一个平台线程上),当虚拟线程被阻塞或等待时,平台线程可以切换到执行另一个虚拟线程,从而高效利用资源。