19|云时代的线程模型:领略线程与虚拟线程的风采
康杨
你好,我是康杨。
今天我们一起来聊一聊 JVM 中的线程模型以及 JDK 21 的关键特性虚拟线程。
在传统的进程模型中,线程是操作系统的基本调度单位,但是会存在一些问题,比如线程的创建和销毁开销比较大,线程之间的切换也会占用大量 CPU 时间。因此,在 Java 中,JVM 通过使用内核线程来代替用户线程,以减少线程的创建和切换的开销。JVM 线程也是 Java 多线程的实现基础,能够并发执行,共享 JVM 内存,而且开销比较小。
线程的模型
JVM 采用了一对一的线程模型,即每个 Java 线程都对应一个操作系统的内核线程。这种模型通过调用操作系统的内核线程来完成线程的切换和执行,而且每个内核线程可以看作是操作系统内核的一个分身。这也就是操作系统能够处理多任务的原因。
线程的状态
在 Java 虚拟机中,线程状态的变化是一个非常重要的概念。线程状态代表了线程在它的生命周期中所处的不同阶段。在 Java 中,线程状态可以描述为 5 种。
当线程对象被创建之后,它会进入新建状态,这个时候它还没有启动运行,也就是说,start() 方法还没有调用。
一旦线程启用了 start() 方法,它就会加入到运行状态。在这个状态下,线程可以继续工作,也可能暂停。
当线程处于等待状态的时候,它会进入阻塞状态。比如,当一个线程在等待 synchronized 锁的时候,而其他线程已经占用了锁,那么这些线程就会进入阻塞状态。
当一个线程正在等待另一个线程完成特定任务的时候,它会进入等待状态。
当线程执行完所有任务后,它会进入终止状态。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了JVM中的线程模型以及JDK 21的关键特性虚拟线程。传统的线程模型存在一些问题,如线程的创建和销毁开销大,线程切换占用大量CPU时间。为了解决这些问题,JVM采用了一对一的线程模型,即每个Java线程对应一个操作系统的内核线程。文章还介绍了线程的状态变化和虚拟线程的概念。虚拟线程是一种轻量级的线程实现,不需要占用大量内存和CPU时间,能够更高效地处理并发任务。在JDK 21中,虚拟线程成为其中一项非常重要的更新特性,有望成为未来线程实现的优先选择。虚拟线程由Continuation和Scheduler两个关键组件共同构成。Continuation是一种编程概念,用来实现轻量级线程切换和挂起的功能。Scheduler负责把任务提交给一个线程池来执行,它类似于ForkJoinPool的线程池,并且是基于FIFO(先进先出)模式进行调度。虚拟线程的调度和挂载/卸载过程是通过调度器实现的,这个过程类似于操作系统中的进程调度。虚拟线程的使用可以通过Thread.ofVirtual()和Executors.newVirtualThreadPerTaskExecutor()方法进行创建。虚拟线程的调度是基于M:N的,意味着多个虚拟线程可以运行在少量的平台线程上。文章还提供了虚拟线程的使用方法,包括两种创建虚拟线程的方法和线程池对虚拟线程的支持。总的来说,本文介绍了线程模型的发展趋势和虚拟线程的重要性,对于理解现代软件开发中的线程处理技术具有重要参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云时代的 JVM 原理与实战》,新⼈⾸单¥59
《云时代的 JVM 原理与实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- Demon.Lee1、“虚拟化进程是在网络平台进程之间运作的,单个网络平台进程可能包含数个虚拟化进程。同样,每一个平台线程也都对应着内核线程。由此,我们得到了这样一条结论:VT 代表一条虚拟线程。” 这里的虚拟化进程是啥,老师能否再解释解释。 2、“由于线程依赖的是操作系统的线程管理机制而不是 Java JDK 中的任务分配和调配模块,因此这个以 OS 为基础构建出来的线程没办法被后者控制。相反地,它是由底层硬件提供的、具有独立管理能力的“虚”态处理单元,即所谓的“VT”,也就是我们常说的虚拟化技术下的多核或超核心计算资源共享方式中的一种特殊形式的多路复用策略。” 虚拟线程由 JVM 管理,这一段实际上想表达的是?没太看懂,能否请老师再说说。2023-11-12归属地:安徽1
- soddygo这个虚拟线程,能否和 kotlin 的协程做比较?看思路是一样的2023-11-09归属地:四川
- 黄海峰那就是java已有协程了啊2023-10-19归属地:广东
收起评论