synchronized和reentrantLock实现原理

原理:每个对象有一个监视锁monitor,当monitor被占用时对象就处于被锁定状态

    线程执行monitorenter指令时常识获取monitor的所有权:当monitor的进入数为0时,表示该对象可被占用,当有进程获取到

    该对象时monitor进入数+1,当执行monitorexit的线程退出时进入数减1。

    都是基于CAS技术实现锁机制。都是试图在用户态就把锁问题解决,避免进入内核态的线程阻塞

    reentrantLock的实现其实是一种自旋锁,通过循环调用CAS操作来实现加锁。

锁的实现区别:

    1、简单的说synchronized是基于JVM实现的,reentrantLock是基于JDK实现的。类似于操作系统实现和自己代码实现。

synchronized是基于编译器保证锁的加锁和释放锁,但reentrantLock是需要手工声明

    2、ReentrantLock灵活性高,可以指定公平锁还是使用非公平锁。而synchronized是非公平锁

    3、ReentrantLock可以通过Condition来指定唤醒对应的线程,但synchronized唤醒类似于notifyAll()

你可能感兴趣的:(synchronized和reentrantLock实现原理)