各種鎖的名詞解釋

1、公平鎖/非公平鎖

公平鎖,是按申請鎖的先後順序依次獲取鎖。

非公平的鎖,不是按照線程申請的順序獲取鎖,可能發生後申請線程比先申請的線程先獲得鎖。

ReentrantLock中可以通過構造方法指定是否爲公平鎖,默認爲非公平鎖,非公平鎖的優點在於吞吐量大。

synchronized一直都是非公平鎖。

2、可重入鎖

可重入鎖,是指一個線程獲取鎖之後再嘗試獲取鎖時會自動獲取鎖。

ReentrantLock和synchronized都是可重入鎖。

3、獨享鎖/共享鎖

獨享鎖,也叫互斥鎖,是指鎖一次只能被一個線程持有。

共享鎖,是指鎖一次可以被多個線程持有。

ReentrantLock和synchronized都是獨享鎖,ReadWriteLock的讀鎖是共享鎖,寫鎖是獨享鎖。

4、樂觀鎖/悲觀鎖

悲觀鎖,是指認爲對於同一個數據的併發操作必然會發生修改,即使不會發生修改也這麼認爲,所以一定要加鎖。

樂觀鎖,是指認爲對於同一個數據的併發操作不一定會發生修改,在更新數據的時候,嘗試去更新數據,如果失敗就不斷嘗試

5、分段鎖

分段鎖,是一種鎖的設計思路,它細化了鎖的粒度,主要運用在ConcurrentHashMap中,實現高效的併發操作,當操作不需要更新整個數組時,就只鎖數組中的一項就可以了。

6、偏向鎖/輕量級鎖/重量級鎖

這三個鎖主要是針對synchronized來說的,要是通過對象監視器在對象頭中的字段來表明的。

偏向鎖,加鎖解鎖不需要額外的消耗,適用於只有一個線程訪問同步代碼快

輕量級鎖,競爭的線程不會阻塞,適用於追求相應時間,同步塊執行速度快。

重量級鎖,適用於追求吞吐量,同步代碼快執行時間長。

7、自旋鎖

自旋鎖,是指嘗試獲取鎖的線程不會阻塞,而是循環的方式不斷嘗試,這樣的好處是減少線程的上下文切換帶來的開鎖,提高性能,缺點是循環會消耗CPU。

8、監視器鎖

synchronized的實現方式,使用monitorenter和monitorexit來實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章