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的虛擬環境。但是這個時候如果我們想安裝東西的話,我們還...