深入理解java虚拟机笔记:高效并发
来源:互联网 发布:tcl电视软件升级 编辑:程序博客网 时间:2024/06/08 07:38
java内存模型JSR133
深入理解java内存模型
深入理解java内存模型 pdf下载
主内存和工作内存
变量存放在主内存,每条线程有自己的工作内存,工作内存保存了使用到的变量的主内存的副本拷贝,线程对变量的所有操作都必须在工作内存进行。通过如下8种操作进行内存间的交互操作:
- lock: 作用于主内存的变量,把一个变量标记为一条线程独占状态。
- unlock
- read: 作用于主内存,将变量从主内存拷出。
- load: 作用于工作内存,将拷出的值写入工作内存。read和load必须配套使用,不允许单独使用。
- use: 作用于工作内存,将值传递给执行引擎。
- assign: 作用于工作内存,把从执行引擎接收到的值付给工作内存。
- store: 作用于工作内存,将变量值拷出。
- write: 作用于主内存,将拷出的值写入主内存。store和write必须配套使用,不允许单独使用。
使用规则
- read和load,store和write不允许单独使用。
- 一个变量如果被assign过,则一定需要同步回主内存。如果没有assign过则不允许同步回主内存。
- lock操作,会清空当前线程中此变量的值,再次从主内存读取。
- unlock操作,会把数据同步回主内存。(store, write)
volatile
volatile具有两个特性(1)保证此变量对所有线程的可见性。写的时候,会将工作内存里面修改过的数据全部同步回主内存。读的时候,会将工作内存设为无效,从主内存重新读取。(2)禁止指令重排,等于在使用该变量的地方建立了内存屏障,屏障后面的语句一定不会提到屏障前面去执行。另外,volatile还保证对double,long变量的load, store, read, write是原子的。(对于现代虚拟机而言,即使不用volatile,也不会读到半个的double,long值。)
原子性、可见性与有序性
原子性: 基本类型的读写是原子的。synchronized块也是原子的。
可见性: 通过volatile,synchronized和final保证。退出同步块时一定会把数据同步回主内存,通过store, write, unlock操作。final字段一旦被初始化完成就是可见的。
有序性: 通过volatile和synchronized保证。
0 0
- 深入理解java虚拟机笔记:高效并发
- 《深入理解java虚拟机-高效并发》读书笔记
- 《深入理解java虚拟机-高效并发》读书笔记
- 《深入理解java虚拟机-高效并发》读书笔记
- Java高效并发之锁优化(深入理解Java虚拟机学习笔记)
- 深入理解Java虚拟机——高效并发
- 深入理解Java虚拟机——高效并发
- 深入理解Java虚拟机之高效并发(读书笔记)
- 深入理解JAVA虚拟机(第五部分-高效并发)
- 深入理解java虚拟机--并发
- 深入Java虚拟机读书笔记之高效并发
- 《深入理解JAVA虚拟机》笔记
- 《深入理解JAVA虚拟机》笔记
- 《深入理解Java虚拟机》笔记
- 《深入理解Java虚拟机》笔记
- 《深入理解JAVA虚拟机》笔记
- 《深入理解Java虚拟机》笔记
- 《深入理解Java虚拟机》笔记
- js中节点的类型
- python list添加
- ubuntu mysql 编码
- 'Icon already includes gloss effects' doesn't work on iOS 6 compiled on xCode 5 with SDK 7
- Ehcache Storage Options
- 深入理解java虚拟机笔记:高效并发
- TIM_OCMode_Timing TIM_OCMode_Toggle 含义
- Spring和Struts的区别?
- 适配器模式(Adapter)
- 大学计算机科学的14个知识领域
- 海淘时代全面来临,强龙能否压过地头蛇
- Ehcache缓存回收策略
- xcode6中自动布局autolayout和sizeclass的使用
- 关于log4j日志输出的相关问题