One of the key value propositions of the copy-on-write idea in the traditional sense is to optimize for the read performance. If I understand correctly, the basic idea is to copy and replace the underlying collection every time write is performed. Thus, all read access would simply (and concurrently) access the collection without synchronization as the underlying collection is &quot;read-only&quot; in a sense.<div>


<br></div><div>It seems in your case all methods are synchronized (and you state as much in the javadoc), so all read access is also synchronized and serialized. It looks like iteration can be done concurrently and safely, but it doesn&#39;t seem to realize the full (and main) benefit of the copy-on-write pattern...</div>


<div><br></div><div>Sangjin</div><div><br><br><div class="gmail_quote">On Wed, Dec 8, 2010 at 9:30 AM, Morgan Conrad <span dir="ltr">&lt;<a href="mailto:morganconrad@yahoo.com" target="_blank">morganconrad@yahoo.com</a>&gt;</span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks for the interest Chris!<br>
<br>
<br>
A blog post, with links to the code, is at<br>
<br>
<a href="http://flyingspaniel.blogspot.com/2010/12/copyonwrite-wrappers.html" target="_blank">http://flyingspaniel.blogspot.com/2010/12/copyonwrite-wrappers.html</a><br>
<br>
The Source Code is stored on a wiki at<br>
<br>
<a href="http://flyingspaniel.wikidot.com/cow" target="_blank">http://flyingspaniel.wikidot.com/cow</a>   (click on the files link at the bottom)<br>
<br>
<br>
I took a brief look at the org.apache.mina.util.CopyOnWriteMap.  It uses a HashMap underneath, and really does a copy on write of the underlying HashMap.<br>
<br>
As mentioned in the blog post, strictly speaking, I do not &quot;copy on write&quot;.  I effectively &quot;copy the iterators on write&quot;.  In this way it supports (at least theoretically) any type of underlying List or Map, such as a TreeMap, where the order of iteration is much different than a HashMap, or some user&#39;s ReallyWeirdCustomCollection that has unusual rules for null keys or values, a custom Comparator, etc...<br>



<br>
I believe the code to be reasonably thread-safe but can easily imagine members of this interest group finding holes or proposing improvements. :-)<br>
<br>
I found it ironic/interesting that where java.util.concurrency uses actual classes for, say, CopyOnWriteArray, my code provides wrappers.  And, while standard java.util.Collections provides wrappers for unmodifiable collections, my code, mainly to be different and provide an alternative, has classes.<br>



<br>
<br>
Thanks for your interest, and I hope the code or idea proves useful to somebody.  As things turned out, we didn&#39;t need to use this code, so it would be nice if somebody got some use out of it.<br>
<div><div></div><div><br>
<br>
<br>
<br>
_______________________________________________<br>
Concurrency-interest mailing list<br>
<a href="mailto:Concurrency-interest@cs.oswego.edu" target="_blank">Concurrency-interest@cs.oswego.edu</a><br>
<a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" target="_blank">http://cs.oswego.edu/mailman/listinfo/concurrency-interest</a><br>
</div></div></blockquote></div><br></div>