據我所知,有兩種方法可以避免ConcurrentModificationException,而一個線程迭代集合,另一個線程修改集合。避免迭代器的方法ConcurrentModificationException
- 客戶端鎖定,基本上在迭代期間鎖定集合。需要訪問集合的其他線程將會阻塞,直到迭代完成。
- 「線程限制」克隆集合並迭代副本。
我想知道有沒有其他的選擇? ,因爲第一種方法顯然是不可取的,性能差,如果集合很大,其他線程可能會等待很長時間。第二種方式我不知道,因爲我們克隆了集合,並且迭代了副本,所以如果其他線程進來並修改原始副本,那麼複製的副本就變得陳舊了?這是否意味着我們需要通過克隆重新啓動並在修改後重新進行迭代?
還有第三種方法也可以使用['CopyOnWriteArrayList'(http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html)如果你是寫入少於讀取。 –
@AmitD你能否解釋更多關於它的原因?爲什麼寫入少於讀取?它是否像concurrentHashMap一樣工作? – peter