简单介绍synchronized的三种锁机制

synchronized一共有三种锁机制,分别是偏向锁、轻量级锁、重量级锁

下面来简单介绍一下这三种锁机制:

1、偏向锁:

偏向锁对应了synchronized中锁只会被一个线程持有的情况,在第一次获取锁对象的时候会进行一次CAS操作,之后该线程再次获取锁对象的时候将只在markword中进行线程id的判断是否为本线程即可,而不会再去进行多余的CAS操作。

2、轻量级锁:

轻量级锁对应了synchronized中不同线程交替持有锁的一种情况,这样线程之间加锁的时间是错开的,也就是没有竞争,轻量级锁通过每次CAS操作修改对象头的锁标志,可以达到保证原子性。

3、重量级锁:

重量级锁对应了synchronized中多线程竞争锁的一种情况,底层采用monitor机制实现,但由于monitor机制涉及用户态和内核态之间的切换、进程上下文切换,所以成本相对来讲还是比较高的,性能相对来说会比较低。

你可能感兴趣的:(java,jvm,开发语言)