[concurrency-interest] Fixed size CopyOnWriteArrayList vs array concurrent access.
brian at quiotix.com
Tue Oct 31 12:51:02 EST 2006
Your colleague has an incorrect understanding.
Because the backing array is effectively immutable (not modified after
publication), for readers it only needs to be locked briefly to
guarantee visibility of the reference the the array. (In fact, the
implementation can do even better than that, but the point is that
multiple threads can iterate the list concurrently.)
The cost comes when you want to modify the list. Then the list has to
be copied; if modifications are frequent, this can have significant
costs. (In a naive implementation, newly arriving readers may be locked
out during the copy operation, but there are tricks to prevent this.)
COW structures are useful when reads greatly outnumber writes or the
size of the collection is small.
Eugene Gordienko wrote:
> Hi All,
> We use java 1.4. We have a use case: fixed size array of objects and need concurrent access to its elements: almost even number of reads and
> writes, also some iterations. The size may be less than 10 but may be more than 100.
> So my choice was fixed size CopyOnWriteArrayList (COWAL) ... but my collegues' argument is: when we wrie to COWAL the chunk of it is locked
> while in case of array of objects we can lock just on one array element.
> What is your experience/suggestion?
> Many thanks,
> Concurrency-interest mailing list
> Concurrency-interest at altair.cs.oswego.edu
More information about the Concurrency-interest