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執行緒執行該方法的時候,其他執行...