全部
常见问题
产品动态
精选推荐

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密集型任务或需要大量并行性的任务。
  • 虚拟线程也可以用来实现异步操作。

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


请登录后查看

Desire- 最后编辑于2024-12-17 16:08:59

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
91
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服