美文网首页工作生活
synchronized和reentrantLock实现原理

synchronized和reentrantLock实现原理

作者: 郑基敏 | 来源:发表于2019-12-24 08:17 被阅读0次

    原理:每个对象有一个监视锁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实现原理

        本文链接:https://www.haomeiwen.com/subject/vnakhctx.html