如果你仍然认为之前的JDK 17没有太多改变,那么JDK 21需要引起你的注意 。因为JDK 21引入了一种新型的并发编程模型 。
目前在JAVA中的多线程并发编程是我们头痛的另一部分 。感觉学起来很困难,使用起来也很复杂 。但是回头看看使用其他语言的朋友,他们根本没有这种麻烦 , 比如GoLang,使用起来非常顺畅 。
文章插图
JDK 21在这个领域取得了巨大的改进 , 使Java并发编程变得更加简单和顺畅 。更准确地说,这些改进在JDK 19或JDK 20中已经存在 。
文章插图
1*wtYzgJzJD8rGtysVoIW1cw.png
其中,虚拟线程、作用域值和结构化并发是多线程并发编程的一些功能 。
一、虚拟线程虚拟线程是基于协程的线程,类似于其他语言中的协程 , 但也有一些区别 。
【Java 21,虚拟线程、结构化并发和作用域值】虚拟线程附加在主线程上 。如果主线程被销毁,虚拟线程将不再存在 。
相似之处:
- 虚拟线程和协程都很轻量级,它们的创建和销毁开销比传统操作系统线程要小 。
- 虚拟线程和协程都可以通过挂起和恢复来在线程之间切换,从而避免了线程上下文切换的开销 。
- 虚拟线程和协程都可以以异步和非阻塞的方式处理任务,提高了应用程序的性能和响应能力 。
- 虚拟线程是在JVM级别实现的,而协程是在语言级别实现的 。因此,虚拟线程的实现可以与支持JVM的任何语言一起使用,而协程的实现需要特定的编程语言支持 。
- 虚拟线程是协程的基于线程的实现,因此它们可以使用与线程相关的API,如ThreadLocal、Lock和Semaphore 。协程不依赖于线程,通常需要特定的异步编程框架和API 。
- 虚拟线程的调度由JVM管理,而协程的调度由编程语言或异步编程框架管理 。因此,虚拟线程可以更好地与其他线程合作,而协程更适合处理异步任务 。
虚拟线程确实可以使多线程编程更加简单和高效 。与传统的操作系统线程相比,创建和销毁虚拟线程的开销更?。?叱躺舷挛那谢坏目??哺??nbsp;, 因此可以大大减少多线程编程中的资源消耗和性能瓶颈 。
使用虚拟线程,开发人员可以像编写传统线程代码一样编写代码,而不必担心线程的数量和调度,因为JVM会自动管理虚拟线程的数量和调度 。此外,虚拟线程还支持传统的与线程相关的API , 如ThreadLocal、Lock和Semaphore , 这使得开发人员更容易将传统线程代码迁移到虚拟线程中 。
虚拟线程的引入使多线程编程更加高效、简单和安全,允许开发人员更多关注业务逻辑,而不必过多关注底层线程管理 。
二、结构化并发结构化并发是一种旨在通过提供结构化且易于遵循的方法来简化并发编程的编程范例 。使用结构化并发,开发人员可以创建更容易理解和调试、不容易出现竞态条件和其他与并发相关的错误的并发代码 。在结构化并发中,所有并发代码都被结构化为称为任务的明确定义的工作单元 。任务以结构化的方式创建、执行和完成,任务的执行始终保证在其父任务完成之前完成 。
结构化并发可以使多线程编程更加简单和可靠 。在传统的多线程编程中 , 线程的启动、执行和终止都是由开发人员手动管理的,因此容易出现线程泄漏、死锁和不正确的异常处理等问题 。
使用结构化并发,开发人员可以更自然地组织并发任务,使任务之间的依赖关系更清晰 , 代码逻辑更简洁 。结构化并发还提供了一些异常处理机制,以更好地管理并发任务中的异常,避免由异常引起的程序崩溃或数据不一致 。
此外,结构化并发还可以通过限制并发任务的数量和优先级来防止资源
竞争和饥饿现象 。这些特性使得开发人员能够更容易地实现高效且可靠的并发程序 , 而不必过多关注底层线程管理 。
三、作用域值作用域值是JDK 20中的一项功能,允许开发人员创建仅限于特定线程或任务的作用域值 。作用域值类似于线程本地变量 , 但设计用于与虚拟线程和结构化并发一起使用 。它们允许开发人员以结构化的方式在不同部分的应用程序之间传递上下文信息,例如用户身份验证或请求特定数据 。
推荐阅读
- 理解JAVA的垃圾回收机制
- 香港虚拟币案波及娱乐圈,张智霖曾是代言人,TVB艺人自曝亏50万
- 虚拟现实技术:让你沉浸式体验全新世界
- 虚拟现实:颠覆传统娱乐方式的未来技术
- 一步步进入虚拟现实:AI是如何创造沉浸式艺术的
- 增强现实:扩增的真实
- 针对高级前端的八个级JavaScript面试问题
- 利用Linux虚拟化技术实现资源隔离和管理
- 虚拟现实技术应用架构:拓展互联网体验
- 很多主流项目都放弃了Java 8,背后的原因是什么