千呼万唤始出来:Java终于发布了“协程“--虚拟线程!

背景

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截图以及平台线程和系统线程的关系图:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Kotlin在使用依赖注入时,可以使用Hilt库来实现。Hilt是一个基于Dagger的依赖注入框架,专门为Android应用程序设计。\[1\]在序列化和反序列化方面,Kotlin最常用的库是Gson。然而,由于Gson无法完全支持Kotlin的特性,社区也维护了一些第三方库,如Moshi。但是,个人认为随着官方库的出现,Moshi可能会逐渐被取代。\[2\]在Kotlin中,如果要使用序列化,可以使用@Serializable注解来标记数据类,并使用Json.decodeFromString函数来进行反序列化操作。\[3\] #### 引用[.reference_title] - *1* [Kotlin 38. Dependency Injection依赖注入以及Hilt在Kotlin中的使用,系列1:依赖注入介绍](https://blog.csdn.net/zyctimes/article/details/129218437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [千呼万唤出来,Kotlin官方序列化库终相见(一)](https://blog.csdn.net/weixin_55362248/article/details/121906615)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值