当前位置:首页 > 科技  > 软件

Java21新特性——虚拟线程

来源: 责编: 时间:2023-10-24 09:00:32 476观看
导读Java21最重要的新特性之一是虚拟线程(Virtual Threads)。 传统的Java线程受制于操作系统的线程数,并发能力和可伸缩性有限,许多时候资源无法充分利用。而虚拟线程则提供了一种更高效、更轻量级的线程模型。虚拟线程,也称为

Java21最重要的新特性之一是虚拟线程(Virtual Threads)。 传统的Java线程受制于操作系统的线程数,并发能力和可伸缩性有限,许多时候资源无法充分利用。而虚拟线程则提供了一种更高效、更轻量级的线程模型。虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,它们可以比传统线程创建更多数量,并且开销要少得多。YfK28资讯网——每日最新资讯28at.com

本文主要介绍Java传统的线程和虚拟线程的特点和区别,以及虚拟线程的编码方法和注意事项。YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

传统的线程

在旧的Java版本中使用的线程依赖于操作系统的线程,创建线程、销毁线程以及线程切换都需要大量性能开销。而操作系统的线程数有限,当应用系统需要大量线程的时候,可能会导致系统资源耗竭,性能下降,甚至导致系统奔溃。在旧的Java版本中,我们所使用java.lang.Thread来定义线程,这个就是由操作系统所支持的线程。这种线程通常以1:1的比例映射到OS调度的内核。OS线程相当“重”。根据操作系统配置,默认情况下,每个线程消耗2到10 MB, 因此,如果想在发应用程序中使用一百万个线程,那么就要求有超过2TB的内存可供使用!很明显,这就限制了线程数量。YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

在基于Java的Web应用中,每个请求使用一个线程有很多优点,比如状态管理和清理更加容易。但它也造成了可扩展性的限制。容易使CPU或网络资源耗尽。 YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

虚拟线程

Java21引入虚拟线程,使得Java应用程序的线程不再受制于操作系统,可以在应用中创建多达数十亿的线程,更好地适应各种高并发场景,提供更高的并发能力。虚拟线程具有以下优点:YfK28资讯网——每日最新资讯28at.com

  • 更高的性能:虚拟线程不再受制于操作系统的线程数,并且减少了线程创建、销毁、共享等操作的性能开销。从而获得更高的并发性能。
  • 更高可伸缩性:虚拟线程可以创建多达数十亿的线程,更能适应Java应用的大规模并发场景。
  • 资源消耗更低:虚拟线程比操作系统的线程更加轻量级,资源利用率较高,CPU和内存占用较少。

虚拟线程是一个java.lang.Thread变体,是Project Loom的一部分,不受操作系统的管理或调度,而是由JVM负责调度。当然,任何底层的逻辑都还必须在操作系统线程中运行,只是JVM利用载体线程(carrier threads,也就是平台线程)之上“携带”虚拟线程。YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

编码示例

虚拟线程的学习成本比较低,只需要像对待非虚拟线程一样对待他们就可以了。YfK28资讯网——每日最新资讯28at.com

(1) 传统线程的开发传统线程的用法在使用虚拟线程之前我们先来回顾一下传统的线程的写法。YfK28资讯网——每日最新资讯28at.com

Runnable fn = () -> {  // 业务代码};Thread thread = new Thread(fn).start();

Project Loom 简化了并发方法,它提供了一种新方法来创建平台的线程:YfK28资讯网——每日最新资讯28at.com

Thread thread = Thread.ofPlatform().                      .start(runnable);

或者:YfK28资讯网——每日最新资讯28at.com

Thread thread = Thread.ofPlatform().                      .daemon()                      .name("my-custom-thread")

YfK28资讯网——每日最新资讯28at.com

(2) 虚拟线程的用法YfK28资讯网——每日最新资讯28at.com

API写法:YfK28资讯网——每日最新资讯28at.com

Runnable fn = () -> {// 业务代码};Thread thread = Thread.ofVirtual(fn)                      .start();

Project Loom 写法:YfK28资讯网——每日最新资讯28at.com

Thread thread = Thread.startVirtualThread(() -> {// 业务代码});

YfK28资讯网——每日最新资讯28at.com

创建虚拟线程的另一种方法是使用Executor:YfK28资讯网——每日最新资讯28at.com

var executorService = Executors.newVirtualThreadPerTaskExecutor();executorService.submit(() -> {// 业务代码});

YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

因为所有的虚拟线程都是守护线程,所以如果想在主线程上等待,就需要调用join()方法,Join方法的作用就是让主线程等待,当有新的线程加入时,主线程会进入等待状态,一直到调用方法的副线程执行结束为止。YfK28资讯网——每日最新资讯28at.com

thread.join();

YfK28资讯网——每日最新资讯28at.com

虚拟线程开发注意事项

  • 注意控制线程数:虚拟线程可以创建大量线程,很容易让开发人员不在意其数量,而过多的线程仍然会导致性能下降或资源耗尽。因此,仍需根据资源数量合理控制应用程序的并发度。
  • 注意线程安全:使用虚拟线程时要注意线程安全性和正确性,避免共享可变状态、根据需要使用同步机制。
  • 注意代码迁移:在从传统线程迁移到使用虚拟线程的时候,需要注意代码与新环境、新规范、新需求的一致性。 

总结

虚拟线程是Java并发开发方面的通用、强大的新方法,在Java21版本中已经十分成熟了。对于需要从旧版本JDK迁移到新版本JDK的应用程序来说,改造难度并不大,同时还可以充分利用所有可用硬件资源,提高Java应用程序的并发性和可伸缩性。YfK28资讯网——每日最新资讯28at.com

YfK28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14722-0.htmlJava21新特性——虚拟线程

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 揭秘 Go 中的 new() 和 make() 函数

下一篇: Go中使用sync.Map实现线程安全的缓存

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • OPPO K11采用全方位护眼屏:三大护眼能力减轻视觉疲劳

    日前OPPO官方宣布,全新的OPPO K11将于7月25日正式发布,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼IMX890主摄,堪称是2000档位影像表
Top