深入理解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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鱼缺氧浮上水面怎么办 车载低音炮有电流声怎么办 925纯银变黑了怎么办 银子放久了变黑怎么办 高铁票网上售空怎么办 高铁票出票失败怎么办 高铁票名字打错怎么办 高铁票姓名错了怎么办 高铁票弄丢了怎么办 用过的车票丢了怎么办 高铁票被水洗了怎么办 沈阳地铁卡丢了怎么办 火车票没写检票口怎么办 吃鸡听的脚步声距离太近怎么办 检票时车票丢了怎么办 高铁出站没检票怎么办 高铁来不及取票怎么办 被发现假的增值税发票怎么办 高铁票身份证验证失败怎么办 网上订的火车票查不到怎么办 已经参加工作想学个本科证怎么办 火车晚点耽误下一趟列车怎么办 门外装监控没有预留电线怎么办 框架柱主筋柱顶预留长度不够怎么办 遇到很嚣张的人怎么办 在地板砖上铺木地板卧室门怎么办 宝宝打预防针的本子丢了怎么办 宝宝打预防针本子丢了怎么办 打疫苗的本子丢了怎么办 麦客收割机麦秸里加麦粒怎么办 高铁乘务员身高不够怎么办 坐火车买到站票怎么办 买上车补票原票怎么办? 买的商务座补票怎么办 12306账号被别人登录怎么办 飞机不提供餐食怎么办 12306退票支付宝失败怎么办 12306重复支付怎么办支付宝 支付宝登的12306账号怎么办 没买儿童高铁票怎么办 网上订的机票怎么办托运