当前位置:首页 > 科技  > 软件

面试官:什么是虚拟线程?为什么要有虚拟线程?

来源: 责编: 时间:2023-12-20 17:46:53 329观看
导读Java 中的虚拟线程,也叫做协程或“轻量级线程”,它诞生于 JDK 19(预览 API),正式发布于 JDK 21,它是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销

Java 中的虚拟线程,也叫做协程或“轻量级线程”,它诞生于 JDK 19(预览 API),正式发布于 JDK 21,它是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。K9e28资讯网——每日最新资讯28at.com

操作系统线程、普通线程(Java 线程)和虚拟线程的关系如下:K9e28资讯网——每日最新资讯28at.com

图片图片K9e28资讯网——每日最新资讯28at.com

虚拟线程使用

虚拟线程的创建方式,主要有以下 4 种:K9e28资讯网——每日最新资讯28at.com

  1. Thread.startVirtualThread(Runnable task)
  2. Thread.ofVirtual().unstarted(Runnable task)
  3. Thread.ofVirtual().factory()
  4. Executors.newVirtualThreadPerTaskExecutor()

具体示例如下。K9e28资讯网——每日最新资讯28at.com

1.startVirtualThread

创建虚拟线程,并直接启动执行任务:K9e28资讯网——每日最新资讯28at.com

// 创建并启动虚拟线程Thread.startVirtualThread(() -> {    System.out.println("Do virtual thread.");});

2.unstarted

只创建虚拟线程,但不直接启动:K9e28资讯网——每日最新资讯28at.com

// 创建虚拟线程Thread vt = Thread.ofVirtual().unstarted(()->{    System.out.println("Do virtual thread.");});// 运行虚拟线程vt.start();

3.factory

先创建虚拟线程工厂,然后再使用工厂创建虚拟线程,之后再调用 start() 方法进行执行:K9e28资讯网——每日最新资讯28at.com

// 创建虚拟线程工厂ThreadFactory tf = Thread.ofVirtual().factory();// 创建虚拟线程Thread vt = tf.newThread(()->{    System.out.println("Do virtual thread.");});// 运行虚拟线程vt.start();

4.newVirtualThreadPerTaskExecutor

使用线程池的方式创建虚拟线程:K9e28资讯网——每日最新资讯28at.com

// 创建一个支持虚拟线程的线程池ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();executor.submit(()->{    System.out.println("Do virtual thread.");});

虚拟线程 VS 普通线程

虚拟线程和普通线程的区别主要体现在以下几点:K9e28资讯网——每日最新资讯28at.com

  1. 普通线程是和操作系统的物理线程是一一对应的,而虚拟线程是 JVM 层面的逻辑线程,并不和操作系统的物理线程一一对应,它可以看作是轻量级的线程。
  2. 普通线程默认创建的是用户线程(而守护线程),而虚拟线程是守护线程,并且其守护线程的属性不能被修改,如果修改就会报错,如下图所示:

图片图片K9e28资讯网——每日最新资讯28at.com

  1. 虚拟线程由 JVM 调度和使用,避免了普通线程频繁切换的性能开销,所以相比于普通的线程来说,运行效率更高。

小结

线程是轻量级的进程,而虚拟线程则是轻量级的线程,虚拟线程是 JVM 层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此使用它可以减少线程上下文切换所带来的性能开销。它和普通线程的线程类型也不同,普通线程是默认是用户线程类型,而虚拟线程则是守护线程(而且不能被修改)。K9e28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-50757-0.html面试官:什么是虚拟线程?为什么要有虚拟线程?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: CORS 跨域工作机制与安全防范

下一篇: SpringBoot中如何优雅地个性化定制Jackson

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己“当家”的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
Top