《java并发编程的艺术》二 java并发机制的底层实现原理
一、volatile的应用 volatile的定义与实现原理 volatile的两条实现原则: (1)Lock前缀指令会引起处理器缓存回写到内存。 (2)一个处理器的缓存回写到内存会导致其他处理器的缓存无效。 如果通过嗅探一个处理器来检测其他处理器打算写内存地址,而这个地址当前处于共享状态,那么正在嗅探的处理器将使它的缓存行无效,在下次访问相同内存地址时,强制执行缓存行填充。 二、synchronized的实现原理与应用 java中的每一个对象都可以作为锁,具体表现为以下3种形式: (1)对于普通同步方法,锁的是当前实例对象。 (2)对于静态同步方法, 锁的是当前类的Class对象。 (3)对于同步方法块,锁的是synchronized括号里配置的对象。 1. java对象头 synchronized用的锁是存在java对象头里的。java对象头里的Mark word里默认存储对象的Hashcode、分代年龄和锁标志位。 在运行期间,Mark word里存储的数据会随着锁标志位的变化而变化。 2. 锁的升级与对比 java中的锁一共有四种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态,这几个状态会随着竞争情况逐渐升级,锁可以升级但不能降级,这种策略,目的是为了提高获得锁和释放锁的效率。 2.1 偏向锁 经过研究发现,大多数情况下,锁不仅不存在多线程竞争