先随便看个VirtualThread的相关资料理解虚拟线程和平台线程的概念或者看这个也行Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量

先说结论:虚拟线程依赖于ForkJoinPool()进行底层实现,ForkJoinPool()依赖于平台线程



上图证明虚拟线程底层依赖于ForkJoinPool(),还要注意一点ForkJoinPool()的平台线程都是守护线程与其他线程池不一致

注意事项:ThreadLocal和Synchronized存在一些问题需要避免或者考虑 参考资料:Java19 正式 GA!看虚拟线程如何大幅提高系统吞吐量

Executors提供newVirtualThreadPerTaskExecutor()方法使用虚拟线程,但是注意实现类为ThreadPerTaskExecutor此类实际上并不会复用虚拟线程而是来一个请求调用ThreadFactory的newThread()创建虚拟线程.但是因为虚拟线程的ForkJoinPool是共用的所以并没有无限创建平台线程,而且因为ForkJoinPool是当前cpu核心数的并行度所以实际创建的平台线程很少

结构化并发:

对应文章使用Loom创建虚拟线程 - david
该特性可以让try内的代码对外保持同步,原理是try-with-Resource会调用java.lang.AutoCloseable#close方法而java.util.concurrent.ThreadPerTaskExecutor#close方法会检查并等待未执行完的线程
2022年9月27日 11:20:53 实际上ExecutorService也实现了close,所以Executors里的线程池都可以使用结构化并发

原理探究:

不再直接调用Thread的sleep()和yield()的本地方法而是重写加入了虚拟线程判断实现

学习资料:
廖雪峰-使用虚拟线程

2022年10月8日 01:57:59 VirtualThread的ThreadLocal和Synchronized后续的的解决方案应该和Thread.sleep() Thread.yield()方法类似,使用(Thread.currentThread() instanceof VirtualThread)判断是否为虚拟线程然后特殊处理

2022年10月8日 11:26:42 虚拟线程 - VirtualThread源码透视 –Continuation讲得很细,VirtualThread原理也很到位

2022年11月3日 14:51:18 支持JDK19虚拟线程的web框架,之五(终篇):兴风作浪的ThreadLocal 解释ThreadLocal存在的性能问题

2022年11月3日 17:29:58 JEP 425: Virtual Threads (Preview)-官方对虚拟线程的介绍,其中就有Threadlocal和Synchronized对应内容

2022年11月18日 16:16:57 stackoverflow的提问:为什么虚拟线程不是默认的?-答案是为了向后兼容

2023年2月20日 17:00:47 性能怪兽——JDK19的虚拟线程-言简意赅的说明了virtual thread的原理以及优点弊端

2023年3月10日 16:18:26 简单了解下JDK19预览版的 Virtual Threads-CompletableFuture netty synchronized Python Golang 等都有提到

2023年3月10日 16:51:43 浅谈有栈协程与无栈协程-virtual thread和golang的协程均为有栈协程,netty的为无栈协程

2023年3月10日 16:58:39 Java虚拟线程的核心: Continuation-virtual thread是对称协程 无栈协程效率高但是开发麻烦,有栈协程效率略低但是不需要额外开发

2023年3月17日 15:08:41 Java19虚拟线程都来了,我正在写的线程代码会被淘汰掉吗?-“干掉丑陋的响应式编程” “阻塞操作将不再挂起内核线程” “不再依赖线程池”

2023年3月20日 16:59:55 美团:某动态线程池框架是官方开源的么?–cubecube的回复:虚拟线程的资源消耗就和一个 Object 一个数量级,有啥可考虑的。

2023年3月21日 09:33:00 Golang、Kotlin、C#、JS、Python等都有协程,市面上的协程有什么本质上的区别?-hitsmaxft的回答:“这也是为什么他们“无栈”的原因, 真实运行起来的代码, 往往是各种零散的 forkjoin task 或者 callback function ,所以抛异常出来, 都是奇奇怪怪的半截堆栈。 而不是原来写的同步代码的样子。”

Java VirtualThread 虚拟线程的个人粗浅理解相关推荐

  1. Java 19 虚拟线程

    前言 在 Java 中,虚拟线程 (JEP-425) 是 JVM 管理的轻量级线程,它有助于我们编写高吞吐量并发应用程序. 1. Java线程模型和虚线程 1.1 平台线程 在 Java 中,经典线程 ...

  2. Java虚拟线程:一种低成本、轻量级、用户态的Java线程

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 OpenJDK在 ...

  3. Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)

    介绍 虚拟线程具有和 Go 语言的 goroutines 和 Erlang 语言的进程类似的实现方式,它们是用户模式(user-mode)线程的一种形式. 在过去 Java 中常常使用线程池来进行平台 ...

  4. 深入理解 Java 锁与线程阻塞

    相信大家对线程锁和线程阻塞都很了解,无非就是 synchronized, wait/notify 等, 但是你有仔细想过 Java 虚拟机是如何实现锁和阻塞的呢?它们之间又有哪些联系呢?如果感兴趣的话 ...

  5. java 线程池的理解_JAVA线程池原理的理解

    线程池原理基础理解: 线程池初始化规定个数的线程,然后这些线程一直运行,并且监控线程队列,只要线程队列被添加进线程,那么线程池不断从队列中取出线程运行.直到队列中的线程为空.实例代码如下: packa ...

  6. Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的。...

    java中,线程的状态使用一个枚举类型来描述的.这个枚举一共有6个值: NEW(新建).RUNNABLE(运行).BLOCKED(锁池).TIMED_WAITING(定时等待).WAITING(等待) ...

  7. java多线程方式轮询,深入理解JAVA多线程之线程间的通信方式

    一,介绍 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码. 二,线程间的通信方式 ①同步 这里讲的同步是指多个线程通过sy ...

  8. java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器

    线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...

  9. java daemon 线程_【转】关于Java的Daemon线程的理解

    网上对Java的Daemon线程的说法很多,看的人头晕. 所以自己就来总结一下: Java语言自己可以创建两种进程"用户线程"和"守护线程" 用户线程:就是我们 ...

最新文章

  1. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
  2. 用扫描的方式实现Rosenfeld and Pfaltz提出的距离变换!
  3. 学习事务,视图和索引
  4. 高校学院计算机实验室管理系统概述,高校实验室管理系统
  5. 搞定系统设计 01:从 0 到百万用户的系统
  6. vs2012编译boost_1_54_0
  7. 深入react技术栈(2):JSX语法
  8. Shell declare的使用方法
  9. 计算机代码清单目录,(程序源代码清单.doc
  10. 机器人正改变着全球工业,仅中国去年就买了9万台
  11. 在Redis中设置了过期时间的Key注意事项
  12. 《EMCAScript6入门》读书笔记——16.Generator函数的语法
  13. Revit二次开发——新建墙类型
  14. html5广告的版式设计,25张以文字排版为主的海报设计
  15. 【Lua杂谈】debug.getinfo源码分析——使用C API重写lfunctimer
  16. 如何用ping 命令简单测试网速
  17. php pdo mysql 超时_为 PDO 增加读写超时
  18. 【CS】软件测试概念Software Testing
  19. 关于Muster 5.5.7的奇怪问题
  20. 服务器微信发送图片困难是什么原因导致的,微信接受的图片不清楚的原因是什么?怎么发清楚?...

热门文章

  1. 史上最全的画册制作流程—画册制作流程
  2. 爱奇艺被曝大规模裁员20%-40%
  3. PyQt5——退出应用程序和设置图标
  4. 从3.5英寸到6.5英寸,新iPhone终结单手握持时代
  5. zset获取指定score_7、Redis中对ZSet类型的操作命令
  6. Linux ❀ vi/vim多行前缀等长删除操作
  7. 我的世界麦块我的世界java_麦块我的世界盒子(麦块下载)V3.1.0.0正式版
  8. python 在线学习站点
  9. Spring 面试之IoC 和 AOP
  10. 解决MATLAB2016b不能与M文件关联的问题