Pay for Hesitation: CopyOnWriteArrayList

Pages

2010年11月17日 星期三

CopyOnWriteArrayList

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
A thread-safe variant of ArrayList in which all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underlying array.
This is ordinarily too costly, but may be more efficient than alternatives when traversal operations vastly outnumber mutations, and is useful when you cannot or don't want to synchronize traversals, yet need to preclude interference among concurrent threads. The "snapshot" style iterator method uses a reference to the state of the array at the point that the iterator was created. This array never changes during the lifetime of the iterator, so interference is impossible and the iterator is guaranteed not to throwConcurrentModificationException. The iterator will not reflect additions, removals, or changes to the list since the iterator was created. Element-changing operations on iterators themselves (remove, set, and add) are not supported. These methods throw UnsupportedOperationException.


原來JAVA 1.5 API有這種東西,
當初寫IMCrowd我為了解決list iteration 和 list modification丟出concurrentModificationException的問題,
先後還嘗試實作semaphore及額外維護一個list copy. 冏rz

沒有留言: