ConcurrentHashMap兩個版本比較

2021-10-03 21:16:56 字數 1158 閱讀 6215

mapmap = new concurrenthashmap()

1.7版本

初始容量預設為16段(segment),使用分段鎖設計

不對整個map加鎖,而是為每個segment加鎖

當多個物件存入同乙個segment時,才需要互斥

最理想的狀態為16個物件分別存入16個segment,並行數量16

使用方式與hashmap無異

只有16把鎖,後續擴容之後也只有16把鎖,乙個鎖鎖多個鍊錶陣列(與1.8比較)

1.8版本

cas(comparableandswap)交換演算法和同步鎖

cas(comparableandswap)交換演算法

v:要更新的值

e:預期的值

n:新值

當v == e時,v == n

如果在修改過程中,v已經發生變化,v != e ,則取消當前賦值操作,做下一次賦值操作

多執行緒訪問,乙個執行緒在修改過程中,時間片沒了,下乙個執行緒也去修改完成,上乙個執行緒分到時間片發現v已經發生變化

同步鎖鎖的是表頭物件,拿到鎖的物件要先做節點遍歷。檢視有沒有相同的key,

相同覆蓋,不同,則掛在最後乙個節點的next上

每個鍊錶的第乙個都是表頭,都有鎖,建立新的也是會有(和1.7不同之處)

public v put(k key, v value)

final v putval(k key, v value, boolean onlyifabsent)

synchronized (f)

nodepred = e;//找到最後乙個

兩個矩形的交並比(IOU)

由於最近的專案裡面要用到,雖然是個小東西,但還是來記錄一下.現在我們知道矩形t的左下角座標 x0,y0 右上角座標 x1,y1 矩形g的左下角座標 a0,b0 右上角座標 a1,b1 這裡我們可以看到area roit 跟arae roig 在確定座標而不確定兩個矩形是否相交的情況下,為已知的常量 ...

python兩個版本區別 Python版本比較

題目 比較兩個版本號 version1 和 version2。如果 version1 version2 返回 1,如果 version1 version2 返回 1,除此之外返回 0。你可以假設版本字串非空,並且只包含數字和 字元。字元不代表小數點,而是用於分隔數字序列。例如,2.5 不是 兩個半 ...

anaconda安裝兩個python版本的開發環境

首先我們裝好anaconda以後就已經有乙個python的開發環境了。然後加入我們想再安裝乙個python3.6,我們就可以在cmd輸入命令 conda create name python36 python 3.6這樣就建立了python3.6的虛擬環境。但是這個時候如果我們想安裝東西的話,我們還...