各類鎖總結 hashmap

2021-09-29 16:02:05 字數 1406 閱讀 8993

參考:

獨佔/共享

1 isheldexclusively():該執行緒是否正在獨佔資源。只有用到condition才需要去實現它。

2 tryaquire(int):獨佔方式。嘗試獲取資源,成功則返回true,失敗則返回false。

3 tryrelease(int):獨佔方式。嘗試釋放資源,成功則返回true,失敗則返回false。

4 tryacquireshared(int):共享方式。嘗試獲取資源。負數表示失敗;0表示成功,但沒有剩餘可用資源;正數表示成功,且有剩餘資源。

5 tryreleaseshared(int):共享方式。嘗試釋放資源,如果釋放後允許喚醒後續等待結點返回true,否則返回false。

公平鎖 (原理均為aqs,以reentrantlock舉例)

參考:

總結:非公平鎖並非隨機喚醒,等待佇列裡都必須排隊,非公平鎖初次競爭可以直接搶占,公平鎖初次競爭必須禮讓佇列裡的執行緒,並加入佇列(隊尾)。

讀寫鎖:

原理:總結:無寫鎖等待,讀讀鎖共享,有寫鎖等待,後來的讀鎖排隊;寫鎖獨佔,後來鎖全部排隊;佇列中先到先得,讀寫鎖均無特權;首次競爭鎖支援公平/非公平。

concurrenthashmap

參考:

有確說實,一篇就夠。

一些點:

jdk8中 hashmap單個桶上鍊表節點大於等於8(常量treeify_threshold寫死)化為紅黑樹

jdk8中 hashmap【擴容】時,發現單個桶上鍊表節點小於等於6(常量untreeify_threshold寫死)退化成煉表

jdk7中 hashmap多執行緒不安全體現在擴容時會造成環形鏈或資料丟失。

jdk8中 hashmap多執行緒不安全體現在會發生資料覆蓋的情況(兩個執行緒同時寫乙個key值,後覆蓋前)。

reetrantlick相對於 synchronized 的優勢

reentrantlock獨有的能力:

1. reentrantlock可以指定是公平鎖還是非公平鎖。而synchronized只能是非公平鎖。所謂的公平鎖就是先等待的執行緒先獲得鎖。

2. reentrantlock提供了乙個condition(條件)類,用來實現分組喚醒需要喚醒的執行緒們,而不是像synchronized要麼隨機喚醒乙個執行緒要麼喚醒全部執行緒。

3. reentrantlock提供了一種能夠中斷等待鎖的執行緒的機制,通過lock.lockinterruptibly()來實現這個機制。

synchronized的機制

c 執行緒同步各類鎖

1 原子操作 interlocked 所有方法都是執行一次原子讀取或一次寫入操作。2 lock 語句 避免鎖定public型別,否則例項將超出 控制的範圍,定義private物件來鎖定。3 monitor實現執行緒同步 通過monitor.enter 和 monitor.exit 實現排它鎖的獲取和...

各類查詢演算法總結

下面就三種常見的查詢演算法 順序查詢 二分查詢 分塊查詢 進行總結並附實現 已驗證。1 順序查詢 基本思想 順序查詢顧名思義就是按順序挨個查詢 時間複雜度 o n 演算法分析 簡單易懂,對查詢序列也沒啥要求,對於很多雜亂無章的字串,常用這種演算法,但效率低下 實現 int ordersearch i...

HashMap 學習總結

本文參考見 by chenssy 知識點 1.hashmap的三個建構函式 hashmap 預設初始容量為16,預設載入因子是0.75 hashmap int initialcapacity 指定初始容量 但預設載入因子為0.75 hashmap int initialcapacity,float ...