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

Java21新特性——虚拟线程

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

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

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

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

传统的线程

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

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

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

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

虚拟线程

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

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

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

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

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

编码示例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

thread.join();

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

虚拟线程开发注意事项

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

总结

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

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

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

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

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

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

标签:
  • 热门焦点
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top