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()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容