readwritelock支援兩種模式:讀鎖、寫鎖;
stampedlock支援三種模式:悲觀讀鎖、寫鎖、樂觀讀;
stampedlock的悲觀讀鎖和寫鎖 與 readwritelock的讀鎖和寫鎖 語義相似,允許多個執行緒獲取悲觀讀鎖,只允許乙個執行緒獲取寫鎖,寫鎖和悲觀讀鎖是互斥的。
不同的是stampedlock的悲觀讀鎖和寫鎖在加鎖成功後,都會返回乙個stamp,解鎖時,需要傳入這個stamp。
final stampedlock sl = new stampedlock();
// 獲取、釋放悲觀讀鎖示意**
long stamp = sl.readlock();
try finally
// 獲取、釋放寫鎖示意**
long stamp = sl.writelock();
try finally
stampedlock的效能比readwritelock好的關鍵是支援樂觀讀的方式。readwritelock支援多個執行緒同時讀,但是當多個執行緒同時讀的時候,所有的寫操作會被阻塞;
而stampedlock的樂觀讀是允許乙個執行緒獲取寫鎖的。
class point finally
}return math.sqrt(curx * curx + cury * cury);
}}
stampedlock不可重入,悲觀讀鎖和寫鎖都不支援條件變數。
使用stampedlock不要呼叫中斷操作,可能引發cpu暴漲,如果需要支援中斷功能,一定使用可中斷的悲觀讀鎖 readlockinterruptibly() 和寫鎖 writelockinterruptibly()。
stampedlock讀模板
final stampedlock sl = new stampedlock();
// 樂觀讀
long stamp = sl.tryoptimisticread();
// 讀入方法區域性變數
......
// 校驗stamp
if (!sl.validate(stamp)) finally
}//使用方法區域性變數執行業務操作
......
stampedlock寫模板
Java8對讀寫鎖的改進 StampedLock
該類是乙個讀寫鎖的改進,它的思想是讀寫鎖中讀不僅不阻塞讀,同時也不應該阻塞寫。讀不阻塞寫的實現思路 在讀的時候如果發生了寫,則應當重讀而不是在讀的時候直接阻塞寫!因為在讀執行緒非常多而寫執行緒比較少的情況下,寫執行緒可能發生飢餓現象,也就是因為大量的讀執行緒存在並且讀執行緒都阻塞寫執行緒,因此寫執行...
Slim讀 寫鎖(SRWLock)及同步方式比較
一 srwlock鎖的工作原理 srwlock鎖的目的和關鍵段相同 對乙個資源進行保護,不讓其他執行緒訪問它。但是,與關鍵段不同的是 srwlock鎖允許我們區分哪些想要讀取資源的值的執行緒 讀取者執行緒 和想要更新資源的值的執行緒 寫入者執行緒 讓所有的讀取者執行緒在同一時刻訪問共享資源應該是可行...
「快速排序」比冒泡更好 更快的排序
突然想起今天面試的快速排序 快速排序 比冒泡更好 更快的排序 高快省的排序演算法 假設我們現在對 6 1 2 7 9 3 4 5 10 8 這個10個數進行排序。首先在這個序列中隨便找乙個數作為基準數 不要被這個名詞嚇到了,就是乙個用來參照的數,待會你就知道它用來做啥的了 為了方便,就讓第乙個數6作...