狂野欧美性猛xxxx乱大交-狂野欧美性猛交xxxx-狂躁美女大bbbbbb视频u-捆绑a区-啦啦啦www播放日本观看-啦啦啦www在线观看免费视频

二維碼
企資網(wǎng)

掃一掃關(guān)注

當前位置: 首頁 » 企資快訊 » 匯總 » 正文

HashMap中的resize以及死鏈的情況

放大字體  縮小字體 發(fā)布日期:2022-12-14 02:47:14    作者:葉鈞蕊    瀏覽次數(shù):62
導(dǎo)讀

我們都知道HashMap是線程不安全得, 如果多線程來訪問會有什么問題呢? 答案是會造成死鏈。接下來我們就分析下為何會造成死鏈?說到HashMap中死鎖得情況, 我們就必須要先講下resize()方法, 顧名思義, 這個方法就

我們都知道HashMap是線程不安全得, 如果多線程來訪問會有什么問題呢?

答案是會造成死鏈。

接下來我們就分析下為何會造成死鏈?

說到HashMap中死鎖得情況, 我們就必須要先講下resize()方法, 顧名思義, 這個方法就是來擴容得。

當HashMap得size超過 thredshold時, 就需要擴容了。 當我們put時:

(截圖代碼為JDK7 HashMap源碼)

首先,我們需要知道幾個最基本得概念: Entry<K,V>[] table得初始化長度length(默認值是16),Load factor為負載因子(默認值是0.75),threshold是HashMap所能容納得蕞大數(shù)據(jù)量得Entry(鍵值對)個數(shù)。size是HashMap中實際存在 得鍵值對數(shù)量。threshold = length * Load factor。也就是說,在數(shù)組定義好長度之后,負載因子越大,所能容納得鍵值對個數(shù)越多。

接著我們直接看上面得代碼, 當size >= threshold且table[bucketIndex]不為空就會觸發(fā)resize操作。 然后看resize()方法:

這里重點就是transfer方法, 接著我們來看transfer方法:

第壹: 遍歷舊得table;

第二: 將舊得table中每個元素重新計算hash值, 然后賦予新得table中;

多線程擴容:

這里我們先把核心代碼搬出來, 方便查看

while(null != e) {

Entry<K,V> next = e.next; //第壹行

int i = indexFor(e.hash, newCapacity); //第二行

e.next = newTable[i]; //第三行

newTable[i] = e; //第四行

e = next; //第五行

}

去掉了一些冗余得代碼, 層次結(jié)構(gòu)更加清晰了。

第壹行:記錄old hash表中e.next;

第二行:rehash計算出數(shù)組得位置(hash表中桶得位置);

第三行:e要插入鏈表得頭部, 所以要先將e.next指向new hash表中得第壹個元素;

第四行:將e放入到new hash表得頭部;

第五行:轉(zhuǎn)移e到下一個節(jié)點, 繼續(xù)循環(huán)下去;

核心代碼如上所說, 下面就是多線程同時put得情況了, 然后同時進入transfer方法中:

假設(shè)這里有兩個線程同時執(zhí)行了put()操作,并進入了transfer()環(huán)節(jié):

while(null != e) {

Entry<K,V> next = e.next; //線程1執(zhí)行到這里被調(diào)度掛起了

e.next = newTable[i];

newTable[i] = e;

e = next;

}

上述代碼在多線程并發(fā)執(zhí)行時,容易出現(xiàn)“死鏈”。

 
(文/葉鈞蕊)
免責聲明
本文僅代表作發(fā)布者:葉鈞蕊個人觀點,本站未對其內(nèi)容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔相應(yīng)責任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號

粵ICP備16078936號

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

主站蜘蛛池模板: 免费观看a黄一级视频 | 亚洲黄色视屏 | 亚洲国产成人精品一区二区三区 | 久久精品国产大片免费观看 | 福利精品在线 | 亚洲国产天堂久久精品网 | 奇米888四色在线精品 | 国产视频1| 色综合久久88一加勒比 | 九九免费精品视频在这里 | 天天se天天cao | 国产在线精品观看一区 | 精品99视频 | 中文字幕第一页国产 | 国产成人久久久精品一区二区三区 | 2021国产精品自产拍在线观看 | 精品国产一区二区麻豆 | 国产精品亚洲一区二区在线观看 | 日日摸天天添天天添破 | 日韩一区二区三区在线视频 | 国产精品爱久久 | 亚洲欧美日韩国产精品一区 | 中文字幕在线观看一区 | 国产午夜免费视频 | 成人影院高清在线观看免费网站 | 91精品国产露脸在线 | 香蕉色香蕉在线视频 | 国产综合社区 | 欧美一级在线毛片免费观看 | 热99re久久精品天堂vr | 四虎在线永久免费观看 | 欧美精品一区二区精品久久 | 色播综合网 | 在线国产区 | 99综合色 | 日韩欧美日本 | 欧美久久久久欧美一区 | 米奇7777| 成人国产在线观看 | 亚洲欧美一区二区三区国产精品 | 成人亚洲欧美日韩中文字幕 |