乐观锁,悲观锁
CAS,
volatile
java的锁机制,主要涉及普通的锁和锁升级机制。
1. Monitor才是java里同步的基础单元;synchronized锁和reentranlock都是基于Monitor实现的。其中Synchronized可以锁类/对象。
2. 锁的升级:锁分为偏向锁、轻量级锁、重量级锁,还有个无锁状态。其实前两者在我看来都不能算真正的锁,只是一种机制用来避免了同步锁。
偏向锁是通过CAS判断能否改为运行当前的线程,没有碰到障碍就继续(这样降低了消耗,防止了进锁出锁延迟)
轻量级锁是CAS进行改运行当前线程时遇到了障碍,那么如果碰到障碍,就从偏向锁升级到轻量级。通过自旋一定次数,也就是反复改几次,如果依然不行再升级。如果改成功了,那么就继续(同样避免了进锁出锁的延迟,但是增加了自旋的延迟)
当轻量级锁超过一定次数时,就改为重量级锁也就是普通的锁了,通过Monitor进行同步。
3.改,是意味着改对象头的Mark word,也就是运行的线程id。 说到底锁也不过就是一个权限标记,只允许一个线程持有。