ArrayList執行緒不安全的解決方案

2021-10-04 16:24:14 字數 528 閱讀 1880

public

class

arraylisttest

,string.

valueof

(i))

.start()

;}}}

這是因為多執行緒爭搶修改導致。

1.使用new vector<>()替代new arraylist<>();因為vector是加了synchronized,可以保證執行緒間的同步性。

2.使用輔助工具類collections.synchronizedlist()。同理,可以對set類使用collections.synchronizedset(),對map類使用collections.synchronizedmap()解決相同的問題。

3.使用寫時複製new copyonwritearraylist<>()。這樣在讀多寫少時,很好的提高了併發效率。

ArrayList執行緒不安全分析

乙個 arraylist 在新增乙個元素的時候,它可能會有兩步來完成 1.在 items size 的位置存放此元素 2.增大 size 的值。在單執行緒執行的情況下,如果 size 0,新增乙個元素後,此元素在位置 0,而且 size 1 而如果是在多執行緒情況下,比如有兩個執行緒,執行緒 a 先...

ArrayList 為什麼執行緒不安全

我們先來看看 arraylist 的 add 操作原始碼。public boolean add e e arraylist 的不安全主要體現在兩個方面。其一 elementdata size e 不是乙個原子操作,是分兩步執行的。elementdata size e size 單執行緒執行這段 完全...

執行緒不安全

背景 執行緒不安全 sleep 模擬網路延遲 後多執行緒併發訪問同乙個資源 方法1 同步 塊 語法 synchronized 同步鎖 catch interruptedexception e 方法2 同步方法 使用synchronizd修飾的方法,就叫同步方法,保證a執行緒執行該方法的時候,其他執行...