网站首页 > 精选教程 正文
大家好,我是码上开心,一名程序员,每周会给大家分享一些日常好用的工具以及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 代码和库。这意味着大多数现有的代码可以不做修改地运行在虚拟线程之上,并且可以与传统的线程协同工作。
二、如何使用
- 使用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);
});
- 使用Thread.startVirtualThread创建,该方式等同于上面的Thread.ofVirtual().start()
Thread.startVirtualThread(()->{
System.out.println("virThread-2");
});
- 使用ThreadFactory创建
import java.util.concurrent.ThreadFactory;
ThreadFactory factory=Thread.ofVirtual().factory();
factory.newThread(() -> System.out.println("virThread-3")).start();
- 使用Executors创建
import java.util.concurrent.Executors;
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(() -> System.out.println("virThread-4"))
参考:
- https://medium.com/javarevisited/how-to-use-java-19-virtual-threads-c16a32bad5f7
- 上一篇: Java 是如何实现线程间通信的?
- 下一篇: 什么是Java?你知道不?
猜你喜欢
- 2024-12-05 JAVA创建线程的三种方式、创建线程池的四种方式
- 2024-12-05 Java多线程详解——一篇文章搞懂Java多线程
- 2024-12-05 Java 中虚拟线程
- 2024-12-05 Java守护线程与用户线程的区别
- 2024-12-05 Java守护线程简介
- 2024-12-05 java线程和进程的区别
- 2024-12-05 什么是JAVA?想学习却不知道从哪开始?
- 2024-12-05 什么是Java?你知道不?
- 2024-12-05 Java 是如何实现线程间通信的?
- 2024-12-05 JAVA线程的介绍和使用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)