当前位置: 首页 > news >正文

【学习笔记】深入理解Java虚拟机学习笔记——第12章 Java内存模型与线程

第12章 Java内存模型与线程

12.1 概述

12.2 硬件的效率与一致性

计算机的计算速度比IO快几个数量级,为了消除这种差异,引入了高速缓存,但也带来了更高的复杂度

12.2.1 解释器与编译器

C1客户端编译器:优化力度小,编译快
C2服务端编译器:优化力度大,编译慢
在这里插入图片描述

12.3 Java内存模型

Java内存模型屏蔽了不同平台内存模型的差异

12.3.1 主内存与工作内存

在这里插入图片描述

12.3.2 内存间交互操作

8种操作及规则

12.3.3 对于volatile型变量的特殊规则

轻量级同步机制
可见性,读/写原子性,禁止指令重排(内存屏障)

12.3.4 针对long和double型变量的特殊规则

不适用volatile修饰的long与double,可能由于两次32位操作分解,而使并发读取,取到32位的“半个变量”值

12.3.5 原子性、可见性、有序性

1>原子性
基本类型访问、读写具备原子性
2>可见性
一个线程修改对其他线程可见【volatile、synchronized、final】
3>有序性
执行结果不变,执行顺序可变,但可禁止指令重排

12.3.6 先行发生原则

先行发生规则:HB P453
很多操作要求对之前的操作可观测,比如unlock与lock,不可能指令重排把unlock排在lock之前。

12.4 Java与线程

12.4.1 线程的实现

每一个调用过star()方法但未结束的Thread类就代表一个线程
1>内核线程实现
由内核支持调度,内核线程视为内核的一个分身,但实现时主要使用轻量级进程(与内核线程1:1)
2>用户线程实现
无内核支持,但不用切换内核态,由用户控制线程阻塞处理等(1:N)
3>混合实现
由轻量级进程充当内核与用户进程的桥梁(N:M)
4>Java线程的实现
主流使用内核线程实现

12.4.2 Java线程调度

1>协同式:线程执行完后主动让出
2>抢占式:由系统分配,可让出,但无需主动获取时间片
【线程优先级(Java)可以帮助系统分配时间,但无法完全信任,只是一个对系统的“建议”,且不同操作系统下的优先级映射情况不同】

12.4.3 状态转换

New:新建
Runnalbe:运行
Waiting:wait()、join()、park()
Timed Waiting:sleep、wait、join、park过期时间的方法
Blocked:排他锁阻塞
Terminated:结束执行

12.5 Java与协程

12.5.1 内核线程的局限

分布式场景下请求更多,响应更快,而传统线程池一般为几十个至两百个。线程切换损耗甚至接近于计算开销。

12.5.2 协程的复苏

协程最初为协同调度的用户线程,上下文切换由用户自己实现,而协同调度的实现又更简单,但后面已经出现了抢占式协程

12.5.3 Java的解决方案

loom期望使用有栈协程(纤程)来使用Java对于用户线程的并发实现,但未确定发布日期(2018)

http://www.lryc.cn/news/576469.html

相关文章:

  • python中学物理实验模拟:瞬间推力与摩擦力作用下的物体运动
  • 力扣网C语言编程题:在数组中查找目标值位置之二分查找法
  • 解决cursor无法下载插件等网络问题
  • 深入详解:随机森林算法——概念、原理、实现与应用场景
  • screen用法
  • Gradio全解13——MCP详解(4)——TypeScript包命令:npm与npx
  • 服务器的维护技术都有哪些?
  • Flutter基础(Isolate)
  • 【论文阅读笔记】知网SCI——基于主成分分析的空间外差干涉数据校正研究
  • 开疆智能CCLinkIE转ModbusTCP网关连接傲博机器人配置案例
  • 舵机在不同类型机器人中的应用
  • JVM调优实战 Day 10:性能指标采集与可视化
  • 【闲谈】技术债:软件开发的隐形杀手
  • Redis高级数据结构深度解析:BitMap、布隆过滤器、HyperLogLog与Geo应用实践
  • JWT认证性能优化实战指南
  • 《剖开WebAssembly 2.0:C++/Rust内存管理困局与破局》
  • 剑指offer48_两个链表的第一个公共节点
  • 叉车考试真题(含答案)pdf下载
  • 告别脚本!用浏览器为 AWS CLI 实现真正的 Cognito 单点登录
  • 案例开发 - 日程管理系统 - 第一期
  • PostgreSQL对比Mysql
  • WPS之PPT镂空效果实现
  • Lua现学现卖
  • 数据湖 vs 数据仓库:数据界的“自来水厂”与“瓶装水厂”?
  • 如何利用好doctor
  • lambda、function基础/响应式编程基础
  • JSON简介及其应用
  • 【世纪龙科技】新能源汽车动力电池总成装调与检修教学软件
  • Python助力自动驾驶:深度学习模型优化全攻略
  • JavaScript中Object()的解析与应用