為什么Vector里get讀取也加鎖,感覺只要add加鎖就好了啊
uj5u.com熱心網友回復:
不加鎖會造成臟讀,比如讀取:arr.get(arr.size()-1)
此時另一個執行緒剛剛擴容,還沒填充資料,上面的代碼讀到空了,
或者另一個執行緒在洗掉資料,上面的代碼可能拋例外。
uj5u.com熱心網友回復:
執行緒擴容的時候應該讀到老資料呀,擴容只是復制資料,老資料不會先丟失的呀
uj5u.com熱心網友回復:
擴容讀老資料沒問題,但是 arr.get(arr.size()-1) 這個不一定是讀老資料哦……
而且還有洗掉呢?
uj5u.com熱心網友回復:
CopyOnWriteArrayList讀的時候沒加鎖,他是創建新的副本進行寫操作,當他替換之前陣列的時候,是不是也會出現你說的洗掉資料拋例外的問題呢轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133667.html
標籤:Java EE
上一篇:Java
