1.6版本的synchronsized经过升级之后在某些情况下变得不是那么重了,
升级之后的锁为了减少加锁和释放锁带来的性能消耗引入了偏向锁和轻量级锁。
锁的状态
锁一共有4中状态,无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态。锁的状态会随着竞争的升级而升级,但是锁不能够降级。

偏向锁
经过研究发现,大多数情况下锁不仅不存在竞争,并且总是由同一个线程多次获得,为了让锁获取线程的代价更低就引入了偏向锁。
当只有一个线程访问同步代码块的时候加的是偏向锁,当有其他线程尝试竞争偏向锁的时候,持有偏向锁的线程会释放锁.
轻量级锁
轻量级锁是指当锁是偏向锁的时候,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,提高性能。
重量级锁
重量级锁是指当锁为轻量级锁的时候,另一个线程虽然是自旋,但自旋不会一直持续下去,当自旋一定次数的时候,还没有获取到锁,就会进入阻塞,该锁膨胀为重量级锁。重量级锁会让其他申请的线程进入阻塞,性能降低。
锁的升级过程
当只有一个线程访问同步代码块的时候,加锁加的是偏向锁,会在对象头中存储当前加锁的线程ID,表示对象偏向于当前线程,当出现第二个线程竞争锁的时候,偏向锁会撤销,锁升级为轻量级锁,升级为轻量级锁之后,竞争锁如果失败那么通过CAS的方式获取锁,如果CAS到一定次数之后还是没有获取到锁,那么锁升级为重量级锁。
参考文献:《Java并发编程的艺术》