java并发编程的艺术之读后感二

这是第二章总结的想法。

Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令。

volatile的定义与实现原理

定义:volatile修饰的变量在内存中具有可见性,意思就是线程A,线程B等等一系列线程都可以看见它最新的值。Java线程内存

模型确保所有线程看到这个变量的值是一致的。

实现原理:如果对声明了volatile的 变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的最新数据最后写回到系统内存。通过缓存一致性,各个处理器缓存将失效,处理器将从系统内存中把最新的数据读到处理器缓存
里。

原则:1、Lock前缀指令会引起处理器缓存回写到内存。2、一个处理器的缓存回写到内存会导致其他处理器的缓存无效。

synchronized的实现原理与应用


    实现原理:JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter 和monitorexit指令实现的,而方法同步是使用另外一种方式实现的(javap看到的是方法修饰符上的ACC_SYNCHRONIZED来完成),这个细节在JVM规范里并没有

详细说明。但是,方法的同步同样可以使用这两个指令来实现。

    其本质是对一个对象的监视器(monitor)进行获取,而这个获取过程是排他的,也就是同一时刻只能有一个 线程获取到由synchronized所保护对象的监视。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值