【Java 多線程併發】Java 鎖(下)—— 可重入鎖、公平鎖與非公平鎖、ReadWriteLock 讀寫鎖、共享鎖和獨佔鎖、重量級鎖、輕量級鎖、偏向鎖、分段鎖、鎖優化

上一篇:

【Java 多線程併發】Java 鎖(上)—— 樂觀鎖、悲觀鎖、自旋鎖

【Java 多線程併發】Java 鎖(中)—— Synchronized 同步鎖、ReentrantLock、Semaphonre 信號量、AtomicInteger

 

8. 可重入鎖(遞歸鎖)

本文裏面講的廣義上是可重入鎖,而不是單指 Java 下的 ReentrantLock。

可重入鎖,也叫遞歸鎖,指的是同一線程外層函數獲得鎖之後,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。

在 Java 環境下 ReentrantLock 和 Synchronized 都是可重入鎖。

 

9.公平鎖與非公平鎖

公平鎖(Fair)

加鎖前檢查是否有排隊等待的線程,優先排隊等待的線程,先來先得。

非公平鎖(Nonfair)

加鎖時不考慮排隊等待問題,直接嘗試獲取鎖,獲取不到自動到隊尾等待。

1.非公平鎖性能比公平鎖高 5~10 倍,因爲公平鎖需要在多核的情況下維護一個隊列。

2. Java 中的 Synchronized 是非公平鎖,ReentrantLock 默認的 lock() 方法採用的是非公平鎖。

 

10.ReadWriteLock 讀寫鎖

爲了提高性能,Java

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