[Daily question ~001] Talk about the difference between synchronized and ReentrantLock?

 One question per day, grow together, witness miracles, come on old iron

问题:谈谈synchronized与ReentrantLock的区别?

思考:2分钟...


答案如下:

1.底层实现:
    1)synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monitorexit),对象只有在同步块或同步方法中才能调用wait/notify方法。
    2)ReentrantLock 是从jdk1.5以来(java.util.concurrent.locks.Lock)提供的API层面的锁。

2.锁的类型:
    1)synchronized 的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、向OS申请重量级锁,
    2)ReentrantLock 实现则是通过利用CAS(CompareAndSwap)自旋机制保证线程操作的原子性和volatile保证数据可见性以实现锁的功能。

3.锁的对象:
    1)synchronzied  锁的是对象,锁是保存在对象头里面的,根据对象头数据来标识是否有线程获得锁/争抢锁;
    2)ReentrantLock锁的是线程,根据进入的线程和int类型的state标识锁的获得/争抢。

4.是否可手动释放:
    1)synchronized 不需要用户去手动释放锁,synchro

Guess you like

Origin blog.csdn.net/u010953816/article/details/127446183