衆所周知,如果另一個線程碰巧併發地修改了集合,那麼在集合上迭代而沒有同步的風險會引發ConcurrentModificationException
。可以Collection.size()拋出ConcurrentModificationException?
但是如何在集合上調用size()
? size()
是否涉及迭代來計算集合中元素的數量?如果是這種情況,ConcurrentModificationException
可能會發生(有些人報告這一點,例如here,但對我來說,不清楚尺寸()是罪魁禍首)。
另一方面,如果size()
只是得到一個內部int
計數器變量,不會發生異常。
哪一個是這種情況?
HUMBLE編輯:感謝answerers的精度,這取決於實施。我應該提到它是一個TreeMap。我可以在那張地圖上遇到這個問題嗎?文檔沒有提及TreeMap.size()。
線程安全不是關於是否會拋出ConcurrentModificationException。如果所有線程安全錯誤都如此明顯可見,人們會*愛*。 – user2357112
完全取決於收藏。 – SLaks
它取決於Collection接口的實現。 – vhula