JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java: 虚拟线程

wys521 2024-12-05 15:46:07 精选教程 19 ℃ 0 评论

大家好,我是码上开心,一名程序员,每周会给大家分享一些日常好用的工具以及Java、Go、Python以及前端相关技术知识,欢迎大家关注、点赞、转发,祝大家天天开心。今天给大家分享的是:Java 21中的虚拟线程。

一、介绍

Java 虚拟线程是 Java 21中一种新的并发编程特性,由JVM进行调度,多个虚拟线程对应一个平台线程(有了虚拟线程后,为区分开,将原来的Thread叫做平台线程),多个虚拟线程挂载在一个平台线程上,当虚拟线程被阻塞或等待时,平台线程可以切换到执行另一个虚拟线程。如下图,在没有虚拟线程(图中用VT表示)之前,Java中的线程(即图中的Platform Thread)与内核线程是1:1的关系,要想增加系统并发能力,常用增加线程数或者线程池的方式进行处理,有了虚拟线程后,单个JVM可以创建大量的虚拟线程,并发能力显著提升。

与传统的 Java 线程相比,具有以下特点和优势:

1. 轻量级

虚拟线程是轻量级的线程,其创建和管理的成本远低于传统的操作系统线程。一个虚拟线程在运行时并不直接映射到操作系统的线程,而是由 Java 虚拟机(JVM)来调度和管理。

2. 高并发

由于虚拟线程的轻量级特性,可以在单个 JVM 实例中创建大量的虚拟线程,而不会遇到传统线程在数量上所遇到的限制。这使得高并发编程变得更加容易和高效。

3. 简化编程模型

虚拟线程使得编写并发代码变得更简单,不需要复杂的线程池管理。程序员可以编写看起来像是顺序执行的代码,而 JVM 会在后台高效地管理这些虚拟线程。

4. 集成性

虚拟线程完全兼容现有的 Java 代码和库。这意味着大多数现有的代码可以不做修改地运行在虚拟线程之上,并且可以与传统的线程协同工作。

二、如何使用

  1. 使用Thread.ofVirtual()创建
import java.util.concurrent.TimeUnit;
Thread virThread = Thread.ofVirtual().name("virThread-1").start(() -> {
System.out.println(Thread.currentThread().getName());
TimeUnit.MILLISECONDS.sleep(300);
});
  1. 使用Thread.startVirtualThread创建,该方式等同于上面的Thread.ofVirtual().start()
Thread.startVirtualThread(()->{
System.out.println("virThread-2");
});
  1. 使用ThreadFactory创建
import java.util.concurrent.ThreadFactory;
ThreadFactory factory=Thread.ofVirtual().factory();
factory.newThread(() -> System.out.println("virThread-3")).start();
  1. 使用Executors创建
import java.util.concurrent.Executors;
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(() -> System.out.println("virThread-4"))


参考:

  1. https://medium.com/javarevisited/how-to-use-java-19-virtual-threads-c16a32bad5f7

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表