查漏補缺1:快速失敗與安全失敗

快速失敗與安全失敗都是在集合遍歷中的概念

快速失敗

快速失敗的核心思想是維護一個modCount字段。其實就是相當於一個版本號的功能,每當有線程對集合進行修改時,都會修改modCount的值。那在對集合進行遍歷的時候,每次調用hasNext之前,都會查看這個modCount字段,如果和預期值不一樣,說明遍歷期間有其他線程併發訪問了。此時會拋出一個Concurrent ModificationException異常

安全失敗

安全失敗是基於一種CopyOnWrite的思想。在進行讀操作的時候不直接在原集合上進行,而是對原集合複製得到一個副本,讀操作是基於副本上實現的。這樣即使這期間有其他線程修改了集合,對當前線程來說也是不可見的。因爲寫操作和讀操作是在不同的副本上進行的嘛。這就是安全失敗。但安全失敗的缺點就是在進行讀操作的時候可能會導致內存翻倍,因爲需要進行復制嘛~還有就是,讀操作讀到的數據不一定是最新的,因爲讀寫分離,讀操作對其它線程的更新操作是無法感知的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章