Java 21时代的标志:虚拟线程带来的并发编程新境界

简介: Java 21时代的标志:虚拟线程带来的并发编程新境界

虚拟线程

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

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

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

使用静态构建器方法

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

Runnable runnable = () -> {
    System.out.println("Hello World");
};
// 使用静态构建器方法
Thread virtualThread = Thread.startVirtualThread(runnable);

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

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

与 ExecutorService 结合使用

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

Runnable runnable = () -> {
    System.out.println("Hello World");
};
try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i < 100; i++) {
        executorService.submit(runnable);
    }
}

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

使用虚拟线程工厂

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

Runnable runnable = () -> {
    System.out.println("Hello World");
};
ThreadFactory virtualThreadFactory = Thread.ofVirtual()
        .name("test", 0)
        .factory();
Thread factoryThread = virtualThreadFactory.newThread(runnable);
factoryThread.start();

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

小结

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

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

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

相关文章
|
3天前
|
Java 开发者 UED
掌握Java多线程编程:从基础到高级
【5月更文挑战第31天】本文深入探讨了Java多线程编程的核心概念,包括线程的创建、生命周期、同步机制以及高级并发工具。通过实际示例和代码片段,读者将学会如何有效地管理和协调线程,以编写高效且稳定的并发应用程序。
|
3天前
|
安全 Java 调度
Java语言多线程编程技术深度解析
Java语言多线程编程技术深度解析
152 1
|
3天前
|
安全 算法 Java
Java中的并发编程技术:解锁高效多线程应用的秘密
Java作为一种广泛应用的编程语言,其并发编程技术一直备受关注。本文将深入探讨Java中的并发编程,从基本概念到高级技巧,帮助读者更好地理解并发编程的本质,并学会如何在多线程环境中构建高效可靠的应用程序。
|
3天前
|
Java
Java中多线程的常见实现方式
Java中多线程的常见实现方式
11 2
|
3天前
|
Java 调度
Java中的多线程编程:基础知识与实践
【5月更文挑战第31天】本文将深入探讨Java中的多线程编程,从基础知识到实践应用,全面解析多线程的概念、创建、同步以及在实际应用中的运用。我们将通过实例来展示如何在Java中有效地使用多线程,以提高程序的性能和响应速度。
|
3天前
|
存储 安全 Java
Java语言中的多线程编程技术深入解析
Java语言中的多线程编程技术深入解析
127 1
|
3天前
|
安全 Java
JAVA语言中的多线程编程技术
JAVA语言中的多线程编程技术
|
3天前
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。
|
4天前
|
缓存 监控 安全
Java的线程池和线程安全
Java的线程池和线程安全
|
3天前
|
安全 Java
Java的线程同步与通信:深入理解wait、notify和synchronized
Java的线程同步与通信:深入理解wait、notify和synchronized
12 0