1樓:網友
這個的話不安全的地團頃拆方有很多,比如說他的一系列乎纖問題就會造成很大的傷害塌棗,這些就是不安全的地方,雖然說也不是100%的不安全,但是還是注意安全是最好的。
2樓:普楣楣
1、hashmap執行緒不安全原因: 原因: 中,由於多執行緒對hashmap進行擴容,呼叫了咐穗hashmap#transfer ()具體原因:
某個執行緒執行過程中,被掛起,其他執行緒已經完成資料氏昌遷移,等cpu資源釋放後被掛起的執行緒重新執行之前的邏輯,資料已經被改變,造衡核卜成死迴圈、資料丟失。
3樓:帳號已登出
執行緒是進洞弊程中實毀顫橘施排程和纖團分派的基本單位。乙個程序可以有多個執行緒,但至少有乙個執行緒;而乙個執行緒只能在乙個程序的位址空間內活動。記憶體資源分配給程序,同乙個程序的所有執行緒共享該程序所有資源。
4樓:on自由客90後
有2種辦法讓hashmap執行緒判培滲安全,中旦分別如掘脊下: 方法一:通過返回乙個新的map,這個新的map就是執行緒安全的。
5樓:網友
hashmap底層是乙個entry數亮螞物組,當發物殲生hash衝突的時候敬液,hashmap是採用連結串列的方式來解決的。
6樓:匿名使用者
無論做什麼事,都要先考慮自己是否能那個本事去挑大樑,所以不要高估了自己,也不要瞧不起別人。
7樓:匿名使用者
與名流者談,對於他羨滾派之所講,當裝作偶有不懂之處。太不懂被看輕,太懂 了備孫被厭惡。偶有不懂之處,彼此最為合宜兄賀。
8樓:泡芙味的曉妮
我並不是那麼堅強的人。並不認為不被任何人瞭解都無所謂 ——挪威的森林》村上春樹。
9樓:匿名使用者
hashmap會進行resize操作,在resize操作的時候會造成執行緒不安全。
10樓:帳號已登出
一般情況下的話我覺得如果說不安全的話像這種情況下的話也是非常不錯的一款選擇的。
11樓:杯子的蓋子
比如乙個 arraylist 類,在新增乙個元素的時候,它可能會有兩步來完成:
1. 在 items[size] 的位置存放此元素;
2. 增大 size 的值。
在單執行緒執行的情況下,如果 size = 0,新增乙個元素後,此元素在位置 0,而且 size=1;
而如果是在多執行緒情況下,比如有兩個執行緒,執行緒 a 先將元素存放在位置 0。但是此時 cpu 排程執行緒a暫停,執行緒 b 得到執行陸行擾的機會。執行緒b也向此 arraylist 新增元素,因為此時 size 仍然等於 0 (注意哦,我們假設的是新增乙個元素是要兩個步驟帶孫哦,而執行緒a僅僅完成了步驟1),所以執行緒b也將元素存放在早旦位置0。
然後執行緒a和執行緒b都繼續執行,都增加 size 的值。
那好,現在我們來看看 arraylist 的情況,元素實際上只有乙個,存放在位置 0,而 size 卻等於 2。這就是「執行緒不安全」了。
hashmap為什麼不安全?
12樓:帳號已登出
賭氣呢,就是寫給你看的。女孩子要給男孩點臺階下,下次再哄你,就別那麼倔了。有機會給他點暗示吧,會回來找你的。
13樓:on自由客90後
hashmap底層是乙個entry陣列,當發生hash衝突的時候,hashmap是採用連結串列的方式來解決的,在對應的陣列位置存放連結串列的頭結點。
14樓:帳號已登出
hashmap之所以執行緒不安全,就是resize這裡出的問題。
hashmap在put的時候,插入的元素超過了容量(由負載因子決定)的範圍就會觸發resize擴容操作,擴容操作中,在多執行緒的環境下,存在同時其他的元素也在進行擴容過程的put操作,可能會導致 原來的連結串列形成乙個迴圈連結串列, 然後進行get操作時 就可能引起死迴圈(cpu100%)
15樓:普楣楣
1、hashmap執行緒不安全原因: 原因: 中,由於多執行緒對hashmap進行擴容,呼叫了hashmap#transfer ()具體原因:
某個執行緒執行過程中,被掛起,其他執行緒已經完成資料遷移,等cpu資源釋放後被掛起的執行緒重新執行之前的邏輯,資料已經被改變,造成死迴圈、資料丟失。
hashmap為什麼不安全?
16樓:網友
map概述 我們都知道hashmap是執行緒不安全的,但蔽卜是hashmap的使用頻率在所有map中確實屬於比較高的。因為它可以滿足我們大多數攜弊的場辯並族景了。 map類繼承圖 複製** map是乙個介面,我們常用的實現類。
hashmap執行緒不安全的原因及表現
17樓:戶如樂
1 擴容時可能造成死迴圈,擴容時會造成死鎖,形成環形連結串列;或者造成擴容大小不一致等問題。
2 多個執行緒put的時,get的值可能不一致,put的操作不是原子性的。
3 刪除鍵值對的時候,會刪除剛剛修改的位置元素。
擴容操作時:
這個操作會新生成乙個新的容量的陣列,然後對原陣列的所有鍵值對重新進行計算和寫入新的陣列,之後指向新生成的陣列。
當多個執行緒同時檢測到總數量超過門限值的時候就會同時呼叫resize操作,各自生成新的陣列並rehash後賦給該map底層的陣列table,結果最終只有最後乙個執行緒生成的新陣列被賦給table變數,其他執行緒的均會丟失。而且當某些執行緒已經完成賦值而其他執行緒剛開始的時候,就會用已經被賦值的table作為原始陣列,這樣也會有問題。
環形連結串列的原因:經過這幾步,我們會發現轉移的時候是逆序的。假如轉移前連結串列順序是1->2->3,那麼轉移雹滾後就會變成3->2->1。
這時候就有點頭緒了,死鎖問題不就是因為1->2的同時2->1造成的嗎?所以,hashmap 的死鎖問題就出在這個 transfer() 函式上。
put時:
在hashmap做put操作的時候會呼叫到以上的方法。現在假如a執行緒和b執行緒同時對同乙個陣列位置呼叫addentry,兩個執行緒會同時得到現在的頭結點,然後a寫入新的頭結點之後,b也寫入新的頭結點,那b的寫入操作就會覆蓋a的寫入操作造成a的寫入操作丟失。
刪除時:參考。
當多個執行緒同時操作同乙個陣列位置的時候,也都會先取得現在狀態下該位置儲存的頭結點,然後各自去進行計算操作,之後再把結果寫會到該陣列位置去,其實寫回的時候可能其他的執行緒已經就把這個位置給修改過了,就會覆蓋其他執行緒的修改。
補充:
內部entry陣列預設大小是16,預設負載因子是。
內部entry陣列大小是2的冪。
元素個數超過當前大小*預設因子的時候會擴容到當前大小的2倍。
擴容是為了減少單個entry陣列連結串列的平均長度。
hashmap執行緒不安全的主要因素的put過程中會發生擴容,多個執行緒會同時操作同一塊記憶體導致。
jdk7使用陣列+連結串列方式實現;jdk8使用陣列+連結串列/紅黑樹的方式實現:連結串列滲賣長度為8,連結串列源喊餘轉化為紅黑樹;紅黑樹節點個數為6,紅黑樹會轉化為連結串列。
hashmap為什麼是執行緒不安全的
18樓:世紀網路
中,由於蠢則多執行緒對hashmap進行擴容,呼叫了hashmap,當某個執行緒執行過程中,被掛起,其他執行緒已經完成資料遷移,等cpu資源釋放後被掛起的執行緒重新執行之前的邏輯,資料已經被改變,造成死迴圈、資料丟失。假設兩個執行緒a、b都在進行put操作,此時不會再進行判斷,而態檔配是直接進行插入,這就導致了執行緒b插入的資料被帆指執行緒a覆蓋了,從而執行緒不安全。 <
演示機型:華為matebook x
系統版本:win10 1、中,由於多執行緒對hashmap進行擴容,呼叫了hashmap,當某個執行緒執行過程中,被掛起,其他執行緒已經完成資料遷移,等cpu資源釋放後被掛起的執行緒重新執行之前的邏輯,資料已經被改變,造成死迴圈、資料丟失。
2、 中,由於多執行緒對hashmap進行put操作,呼叫了hashmap,假設兩個執行緒a、b都在進行put操作,並且hash函式計算出的插入下標是相同的,當執行緒a執行完第六行**後由於時間片耗盡導致被掛起,而執行緒b得到時間片後在該下標處插入了元素,完成了正常的插入,然後執行緒a獲得時間片,由於之前已經進行了hash碰撞的判斷,所有此時不會再進行判斷,而是直接進行插入,這就導致了執行緒b插入的資料被執行緒a覆蓋了,從而執行緒不安全。
且慢是什麼?安不安全?且慢平臺安全嗎?
新來的朋友,肯定擔心自己的資金會不會安全。在這裡,請大家放心,且慢是擁有 銷售業務資格許可證 證書編號 並在證監會備案 受證監會監管的 銷售機構。在且慢投資的使用者,資金安全擁有多方保障 首先,且慢受證監會 平安銀行和各大 公司共同監管。使用者在且慢購買的 份額都可以在 公司的官網上查到。其次,使用者的資...
為什麼所在網路存在不安全因素,我用的是鐵通2M獨享寬頻?
鐵通的保證 沒有掉線,只有無法連線!我用的是鐵通m獨享寬頻,最近兩個星期了玩十二之天貳網路遊戲老掉線 鐵通的網不好離他那伺服器超出敬拿一定的距離就老掉線,信我的能換就換了吧我山稿汪也是鐵通的。網逗仔太差了,把我弄的都要崩潰了。不信你就用用看。我裝的鐵通m的寬頻,最近網路非常慢。請直接找鐵通工作人員,...
執行緒安全與執行緒不安全的區別,什麼是執行緒安全什麼是執行緒不安全
執行緒bai安全就是多執行緒訪問時,採du用了加鎖機zhi制,當乙個執行緒訪dao 問該類的某回個資料時,進行保護,其他執行緒答不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。執行緒不安全就是不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒...