【读书笔记】Java并发机制的底层实现原理

温习《Java并发编程的艺术》

volatile

定义

轻量级的synchonized

在多处理器开发保证了共享变了的可见性(一个线程修改了一个共享变了,另外一个线程能够读取这个修改的值)

实现原理

Lock前缀指令会引起处理器缓存回写到内存

一个处理器的缓存回到内存会导致其他处理器的缓存无效

目的

准确和一致地更新共享变量

使用优化

  • 追加字节能优化性能

  • 为什么追加64字节能够提高并发编程的效率呢

  • 在下面两种情况不应该是用64字节
    缓存行非64字节宽的处理器
    缓存变量不会被频繁地写

synchronized

定义

作用

  • 对于普通同步形式,锁是当前实例对象

  • 对于静态同步方法,锁是当前Class对象

  • 对于同步方法块,锁是synchonized括号里配置的对象

实现原理

jvm基于进入和退出Monitor对象来实现方法同步和代码同步

使用monitorenter和monitorexit指令实现,在编译后插入到插入代码

头对象

synchonized用的锁是存在java对象头里的,数组用3个字宽存储对象头,非数组用2个字宽存储对象头

Markword 默认存储对象的Hashcode、分代年龄、锁标记位

锁升级与优化

从1.6以后为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量锁

锁级别从低到高

  • 无锁状态

  • 偏向锁状态

  • 轻量锁状态

  • 重量锁状态

原子操作的实现原理

其他

  • 名词解释

  • 内存屏障

  • 缓存行

  • 原子操作

  • 缓存行填充

  • 缓存命中

  • 写命中

  • 写缺失

你可能感兴趣的:(【读书笔记】Java并发机制的底层实现原理)