可重入锁(ReenTrantLock)和synchronized
2019-02-24 本文已影响2人
无敌锤子棒棒鸡
好久没写简书了,笔记做了很多,但是一直都没有更新。
之前写过一篇讲这两者区别的文章,但是格式不好看,而且整理的不够详细,所以重新更新一篇。
可重入性:
两者都是可重入的
实现层面:
synchronized关键字是基于jvm的,ReenTrantLock是基于jdk实现的。
性能区别:
JDK 5之后,synchronized引入了偏向锁,轻量级锁(自旋锁)后两者的性能相差不大。
锁的粒度:
synchronized关键字使用方便,但是对于粒度的控制不如可重入锁。
ReentrantLock需要手动释放,如果忘记释放容易引起死锁,但是对于粒度控制强于synchronized关键字,ReentrantLock解决死锁的方法是对获取锁的等待时间进行设置并且可以获取各种锁的信息,以及灵活的实现多路通知。
锁的实现机制上:
sync操作Mark Word
lock调用Unsafe类的park()方法
后续慢慢更新吧,做了好多笔记,一下子也没什么精力全部push上来...