好久沒寫簡書了,筆記做了很多觉壶,但是一直都沒有更新脑题。
之前寫過一篇講這兩者區(qū)別的文章,但是格式不好看掰曾,而且整理的不夠詳細(xì)旭蠕,所以重新更新一篇。
可重入性:
兩者都是可重入的
實(shí)現(xiàn)層面:
synchronized關(guān)鍵字是基于jvm的旷坦,ReenTrantLock是基于jdk實(shí)現(xiàn)的掏熬。
性能區(qū)別:
JDK 5之后,synchronized引入了偏向鎖秒梅,輕量級鎖(自旋鎖)后兩者的性能相差不大旗芬。
鎖的粒度:
synchronized關(guān)鍵字使用方便,但是對于粒度的控制不如可重入鎖捆蜀。
ReentrantLock需要手動(dòng)釋放疮丛,如果忘記釋放容易引起死鎖,但是對于粒度控制強(qiáng)于synchronized關(guān)鍵字辆它,ReentrantLock解決死鎖的方法是對獲取鎖的等待時(shí)間進(jìn)行設(shè)置并且可以獲取各種鎖的信息誊薄,以及靈活的實(shí)現(xiàn)多路通知。
鎖的實(shí)現(xiàn)機(jī)制上:
sync操作Mark Word
lock調(diào)用Unsafe類的park()方法
后續(xù)慢慢更新吧锰茉,做了好多筆記呢蔫,一下子也沒什么精力全部push上來...