作者: BigLoser 访问次数: 838 创建时间: 2023-10-03 17:16:07 更新时间: 2024-11-04 03:37:13
在 Java 21 中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在 Java 中编程并发程序更容易、更高效。
虚拟线程,也称为 “用户模式线程(user-mode threads)” 或 “纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它们可以比传统线程创建更多数量,并且开销要少得多。这使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中也是如此。
在 Java 21 中创建和使用虚拟线程有多种方法:
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);
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
,用来为每个提交的任务创建虚拟线程。
开发者还可以创建一个生成虚拟线程的工厂来管理,具体看下面的例子例子:
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 来开发具体业务应用,所以很多场景下可能都不太涉及手工创建的操作。所以,对于虚拟线程的概念,你只需要有一个基本的认识。所以,在文章的最后,做一个小结,以方便大家理解和记忆:
另外,值得注意的是,虽然虚拟线程可以在并发性和可扩展性方面提供显着的帮助,但它们并不总是适合所有场景。有些需要大量计算的任务,并不一定在虚拟线程中运行更好,因为虚拟线程也有上下文切换的开。具体情况还是需要通过测试评测,以找到最优解。
语言: zh-CN
翻译人员:
原作者: 程序猿DD
转载地址: https://my.oschina.net/didispace/blog/10114793
源网址: https://my.oschina.net/didispace/blog/10114793
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。