上一篇:
【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