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

【学习笔记】深入理解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.xdnf.cn/news/14682.html

相关文章:

  • RNN(循环神经网络)与LSTM(长短期记忆网络)输出的详细对比分析
  • 战神授权后台报错:Parse error: syntax error, unexpected end of file in解决办法
  • zookeeper Curator(3):Watch事件监听
  • 搭建Flink分布式集群
  • 深入详解:随机森林算法——概念、原理、实现与应用场景
  • Spring Cloud:高级特性与最佳实践
  • Python基础知识之文件
  • 深入剖析 CVE-2021-3560 与 CVE-2021-4034:原理、区别与联系
  • SQL学习笔记4
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • 基于springboot的火锅店点餐系统
  • 代码随想录|图论|09沉没孤岛
  • 中国双非高校经费TOP榜数据分析
  • 【数据结构】B树的介绍及其实现C++
  • 鸿蒙OS开发IoT控制应用:从入门到实践
  • EXCEL数据报表
  • 修改Docker-compose使Uptime-Kuma支持IPV6
  • 免费无广告PDFCreator:虚拟打印软件一键转 PDF/PNG/JPG
  • Solidity学习 - 未授权访问
  • 问卷调查 [oled]
  • 车载诊断架构--- 车载诊断中的引导式诊断
  • MySQL(1)——count()聚合函数
  • OkHttp 简单配置
  • 链表题解——两数相加【LeetCode】
  • .NET MAUI跨平台串口通讯方案
  • 永磁无刷电机旋转原理
  • 架构轻巧的kokoro 文本转语音模型
  • Apipost 和 Apifox 2025最新功能对比分析
  • 2-深度学习挖短线股-1-股票范围选择
  • [3D-portfolio] 版块包装高阶组件(封装到HOC) | Email表单逻辑 | 链式调用