首頁技術(shù)文章正文

Synchronized和Reentrantlock的區(qū)別有哪些?

更新時間:2020-12-08 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

ReentrantLock是Lock的實現(xiàn)類,是一個互斥的同步鎖。從功能角度,ReentrantLock比Synchronized的同步操作更精細(xì)(因為可以像普通對象一樣使用),甚至實現(xiàn)Synchronized沒有的高級功能,如:

·等待可中斷:當(dāng)持有鎖的線程長期不釋放鎖的時候,正在等待的線程可以選擇放棄等待,對處理執(zhí)行時間非常長的同步塊很有用。

·帶超時的獲取鎖嘗試:在指定的時間范圍內(nèi)獲取鎖,如果時間到了仍然無法獲取則返回。

·可以判斷是否有線程在排隊等待獲取鎖可以響應(yīng)中斷請求與Synchronized不同,當(dāng)獲取到鎖的線程被中斷時,能夠響應(yīng)中斷,中斷異常將會被拋出,同時鎖會被釋放。

·可以實現(xiàn)公平鎖。

從鎖釋放角度, Synchronized在JVM層面上實現(xiàn)的,不但可以通過一些監(jiān)控工具監(jiān)控 Synchronized的鎖定,而且在代碼執(zhí)行岀現(xiàn)異常時,JVM會自動釋放鎖定;但是使用Locκ則不行,Lock是通過代碼實現(xiàn)的,要保證鎖定一定會被釋放,就必須將unlock()放到finally{}中。

從性能角度,Synchronized早期實現(xiàn)比較低效,對比ReentrantLock,大多數(shù)場景性能都相差較大。但是在Java 6中對其進(jìn)行了非常多的改進(jìn),在競爭不激烈時,Synchronized的性能要優(yōu)于ReetrantLock;在高競爭情況下,Synchronized的性能會下降幾十倍,但是ReetrantLock的性能能維持常。



猜你喜歡

反射機(jī)制應(yīng)用:DAO抽取通用層實現(xiàn)

ZooKeeper面試題和答案匯總

Dubbo相關(guān)面試題附答案

Java高級軟件工程師培訓(xùn)課程

分享到:
在線咨詢 我要報名
和我們在線交談!