Java并发机制的底层实现原理-对应Java并发编程的艺术第二章

volatile

被volatile修饰的共享变量进行写操作的时候,字节码中会出现一个Lock前缀的指令。

  • volatile的两条实现原则
    1、 Lock前缀指令会引起处理器缓存会写到内存
    2、 处理器缓存回写到内存会导致其他处理器的缓存无效
    这里其实就是缓存一致性协议的体现。
  • volatile的优化
    追加字节的方式

synchronized

锁的对象分为三种:
1、普通同步方法而言,锁是当前实例对象
2、静态同步方法而言,锁是当前类的class对象
3、同步方法块,锁是Synchronized括号里配置的对象

JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,实现细节不一样
synchronized用的锁是存在java对象头里面的
锁一共有4种状态:无锁-》偏向锁-》轻量级锁-》重量级锁,所可以升级但是不能降级

原子操作的实现原理

处理器通过总线锁和缓存锁实现原子操作。
但是有两种情况处理器不会使用缓存锁:
1、当操作的数据不能被缓存在处理器内部,或者操作的数据跨多个缓存行
2、有些处理器不支持缓存锁定

Java如何实现原子操作:
通过锁和循环CAS的方式实现原子操作

CAS实现原子操作的三大问题:
1、ABA问题---解决办法:加版本号
2、循环时间长开销大
3、只能保证一个共享变量的原子操作

你可能感兴趣的:(Java并发机制的底层实现原理-对应Java并发编程的艺术第二章)