ReentrantLock和監(jiān)視器鎖的選擇

在Java多線程編程中,我們經(jīng)常過加鎖的機制來保證線程同步。以Synchronized關鍵字為實現(xiàn)方式的監(jiān)視器鎖和ReentrantLock的多線程API是我們經(jīng)常使用的兩種方式,那么如何在兩者之間進行選擇呢?

ReentrantLock的API實現(xiàn)了以下這些特性,而這些特性使用監(jiān)視器鎖實現(xiàn)起來比較復雜
定時鎖:索取鎖的時候可以設定一個超時時間,如果超過這個時間還沒索取到鎖,則不會繼續(xù)堵塞而是放棄此次任務。
可中斷鎖:能夠在獲得鎖的同時保持對中斷的響應。
鎖輪詢:只有在鎖可以獲取的情況下才獲取鎖,否則返回false給調(diào)用者。
非塊結(jié)構(gòu)鎖:在一個方法中加鎖,在另一個方法中釋放鎖。
公平鎖:多個線程在等待同一個鎖時,必須按照申請鎖的時間順序排隊等待,而非公平鎖則不保證這點,在鎖釋放時,任何一個等待鎖的線程都有機會獲得鎖。
多條件綁定:使用一個鎖就可以同多個條件進行關聯(lián),而不是使用多個鎖。

很明顯,當在編程當中碰到以上這些需求點時,優(yōu)先使用ReentrantLock API就值得重點考慮。但這并不是說監(jiān)視器鎖并不能實現(xiàn)這些需求,畢竟API只是簡化了編程的難度。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容