Java 21 新特性:虚拟线程(Virtual Threads)

这篇具有很好参考价值的文章主要介绍了Java 21 新特性:虚拟线程(Virtual Threads)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。

虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它们可以比传统线程创建更多数量,并且开销要少得多。这使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中也是如此。

创建和使用虚拟线程

在Java 21中创建和使用虚拟线程有多种方法:

1. 使用静态构建器方法

Thread.startVirtualThread方法将可运行对象作为参数来创建,并立即启动虚拟线程,具体如下代码:

Runnable runnable = () -> {
    System.out.println("Hello, www.didispace.com");
};

// 使用静态构建器方法
Thread virtualThread = Thread.startVirtualThread(runnable);

也可以使用Thread.ofVirtual()来创建,这里还可以设置一些属性,比如:线程名称。具体如下代码:

Thread.ofVirtual()
        .name("didispace-virtual-thread")
        .start(runnable);

2. 与ExecutorService结合使用

从Java 5开始,就推荐开发人员使用ExecutorServices而不是直接使用Thread类了。现在,Java 21中引入了使用虚拟线程,所以也有了新的ExecutorService来适配,看看下面的例子:

Runnable runnable = () -> {
    System.out.println("Hello, www.didispace.com");
};

try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i < 100; i++) {
        executorService.submit(runnable);
    }
}

上述代码在try代码块中创建了一个ExecutorServices,用来为每个提交的任务创建虚拟线程。

3. 使用虚拟线程工厂

开发者还可以创建一个生成虚拟线程的工厂来管理,具体看下面的例子例子:

Runnable runnable = () -> {
    System.out.println("Hello, www.didispace.com");
};

ThreadFactory virtualThreadFactory = Thread.ofVirtual()
        .name("didispace", 0)
        .factory();

Thread factoryThread = virtualThreadFactory.newThread(runnable);
factoryThread.start;

这段代码创建了一个虚拟线程工厂,每个虚拟线程都会以didispace为前缀、以数字结尾(从0开始累加)的名称。

小结

上面我们介绍了虚拟线程的创建和使用,而我们大多数Java开发者都基于Spring来开发具体业务应用,所以很多场景下可能都不太涉及手工创建的操作。所以,对于虚拟线程的概念,你只需要有一个基本的认识。所以,在文章的最后,做一个小结,以方便大家理解和记忆:

  • 虚拟线程是由JVM管理的轻量级线程。
  • 虚拟线程不需要任何显式分配或调度。
  • 虚拟线程非常适合I/O密集型任务或需要大量并行性的任务。
  • 虚拟线程也可以用来实现异步操作。

另外,值得注意的是,虽然虚拟线程可以在并发性和可扩展性方面提供显着的帮助,但它们并不总是适合所有场景。有些需要大量计算的任务,并不一定在虚拟线程中运行更好,因为虚拟线程也有上下文切换的开。具体情况还是需要通过测试评测,以找到最优解。

如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏!

参考资料

  • Java 21:JEP444-Virtual-Threads
  • Spring Boot虚拟线程与Webflux在JWT验证和MySQL查询上的性能比较

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源文章来源地址https://www.toymoban.com/news/detail-712028.html

到了这里,关于Java 21 新特性:虚拟线程(Virtual Threads)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java21虚拟线程实践

      就在前几天,java21正式版发布了,作为继java17之后的又一个长期支持版本 (LTS),为我们带来了很多新的特性,其中我最感兴趣的就是虚拟线程(virtual thread),相信大家对虚拟线程也很好奇。趁着空闲时间安装了jdk21来体验一把,顺便把我查到的关于java21虚拟线程相关的资料

    2024年02月08日
    浏览(37)
  • Java 21 虚拟线程:使用指南(一)

    虚拟线程是由 Java 21 版本中实现的一种轻量级线程。它由 JVM 进行创建以及管理。虚拟线程和传统线程(我们称之为平台线程)之间的主要区别在于,我们可以轻松地在一个 Java 程序中运行大量、甚至数百万个虚拟线程。 由于虚拟线程的数量众多,也就赋予了 Java 程序强大的

    2024年02月04日
    浏览(36)
  • Java21上手体验-分代ZGC和虚拟线程

    几天前Oracle刚刚发布了Java21, 由于这是最新的LTS版本,引起了大家的关注。 我也第一时间在个人项目中进行了升级体验。 一探究竟,和大家分享。 https://jdk.java.net/21/release-notes https://my.oschina.net/waylau/blog/10112170 JEP 431:序列集合 JEP 439:分代 ZGC JEP 440:记录模式 JEP 441:switc

    2024年02月08日
    浏览(29)
  • Java 21 正式 GA,虚拟线程真的来了

    UTC 时间 2023 年 9 月 19 日,期盼已久的 Java 21 终于发布正式版! 本文一起来看看其中最受 Java 开发者关注的一项新特性:Loom 项目的两个新特性之一的 ”虚拟线程(Virtual Thread)“(另外一个新特性是 ”结构化并发(Structured Concurrency)“,当前是预览状态),它被称之为 J

    2024年02月08日
    浏览(46)
  • Java 21 虚拟线程如何限流控制吞吐量

    虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性。但是,随着这些变化而来的是如何最好地管理此吞吐量的问题。本文,就让我们看一下开发人员在使用虚拟线程时,应该如何管理吞吐量。 在大多数情况下,开发

    2024年02月20日
    浏览(39)
  • Java21对虚拟线程进行http压测使用不同的GC

    JDK21默认GC是G1. JDK21除了G1外,还可以使用ZGC(Java11预览、Java15正式版),Java21在ZGC基础上继续推出了分代ZGC,目前还是试行阶段。 开启ZGC: java -XX:+UseZGC -jar myapp.jar 开启ZGC,并试用分代ZGC java -XX:+UseZGC -XX:+ZGenerational -jar myapp.jar 以下的对一个启用tomcat虚拟线程的spring boot 项目

    2024年02月05日
    浏览(43)
  • 【JDK21】详解虚拟线程

    目录 1.概述 2.虚拟线程是为了解决哪些问题 2.1.线程切换的巨大代价 2.2.哪些情况会造成线程的切换 2.3.线程资源是有限的 3.虚拟线程 4.适用场景 你发任你发,我用JAVA8?JDK21可能要对这句话say no了。 现在Oracle JDK是每4个版本,推出一个长期支持版本,JDK21就是前段时间发布的最

    2024年02月05日
    浏览(36)
  • jdk21 虚拟线程原理及使用分享

    jdk21已于北京时间9月19日21点正式发布, 其中引人注目的就是虚拟线程(Virtual Thread)随之正式发布, 不再是此前jdk19、jdk20中的预览版本。 平台线程 :java传统的线程是对系统线程的包装,为了区别于虚拟线程,因此将通过传统方式实现的线程叫做平台线程(Platform Thread) 虚拟线程

    2024年02月04日
    浏览(33)
  • JDK21最终版协程实现之虚拟线程

    JDK9 后的版本你觉得没必要折腾,我也认可,但是JDK21有必要关注。因为 JDK21 引入全新的并发编程模式。 一直沽名钓誉的GoLang吹得最厉害的就是协程了。JDK21 中就在这方面做了很大的改进,让Java并发编程变得更简单一点,更丝滑一点。 之前写过JDK21 Feature。 Virtual Threads 、

    2024年02月08日
    浏览(53)
  • 聊聊JDK19特性之虚拟线程

    在读《深入理解JVM虚拟机》这本书前两章的时候整理了JDK从1.0到最新版本发展史,其中记录了JDK这么多年来演进过程中的一些趣闻及引人注目的一些特性,在调研JDK19新增特性的时候了解到了虚拟线程这个概念,于是对虚拟线程进行学习整理内容如下。 虚拟线程(Virtual Thread

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包