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

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

volatile

定义

轻量级的synchonized编程

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

实现原理

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

一个处理器的缓存回到内存会致使其余处理器的缓存无效并发

目的

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

使用优化

  • 追加字节能优化性能高并发

  • 为何追加64字节可以提升并发编程的效率呢性能

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

synchronized

定义

做用

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

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

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

实现原理

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

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

头对象

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

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

锁升级与优化

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

锁级别从低到高

  • 无锁状态

  • 偏向锁状态

  • 轻量锁状态

  • 重量锁状态

原子操做的实现原理

其余

  • 名词解释

  • 内存屏障

  • 缓存行

  • 原子操做

  • 缓存行填充

  • 缓存命中

  • 写命中

  • 写缺失

相关文章
相关标签/搜索