synchronized一共有三种锁机制,分别是偏向锁、轻量级锁、重量级锁
下面来简单介绍一下这三种锁机制:
1、偏向锁:
偏向锁对应了synchronized中锁只会被一个线程持有的情况,在第一次获取锁对象的时候会进行一次CAS操作,之后该线程再次获取锁对象的时候将只在markword中进行线程id的判断是否为本线程即可,而不会再去进行多余的CAS操作。
2、轻量级锁:
轻量级锁对应了synchronized中不同线程交替持有锁的一种情况,这样线程之间加锁的时间是错开的,也就是没有竞争,轻量级锁通过每次CAS操作修改对象头的锁标志,可以达到保证原子性。
3、重量级锁:
重量级锁对应了synchronized中多线程竞争锁的一种情况,底层采用monitor机制实现,但由于monitor机制涉及用户态和内核态之间的切换、进程上下文切换,所以成本相对来讲还是比较高的,性能相对来说会比较低。