Hi All, I am new to Tuscany Community, being interested in contributing and
trying to catch up. Right now am going through the code to get a feel of it
and the threading issue (as mentioned in
http://www.mail-archive.com/tuscany-dev%40ws.apache.org/msg29138.html) seems
to be something simple that I can fix to try a hand with Tuscany.



Looking at the current implementation SCADefinitionsImpl.java uses java
ArrayList to store the list of policy sets, intents, binding types etc.
Possible solutions to this issue woule be to



a) synchronize the methods that does the operations like clear/addAll OR

b) replace the existing ArrayList with Vectors OR

c) replace the existing ArrayList with CopyOnWriteArrayList (new with
Java1.5)



Option (a) seems to be a bad idea for me as it would lock the entire method,
instead i would go for option (b) OR (c).



Going for option (b), using Vectors OR Collections.synchronizedList
synchronizes your list object. However, the iterators implemented in the
java.util Collections classes are fail-fast, which means that if one thread
changes a collection while another thread is traversing it through an
Iterator, the next Iterator.hasNext() or Iterator.next() call will throw
ConcurrentModificationException. If we have to prevent
ConcurrentModificationException, we must lock the entire List while you are
iterating by wrapping it with a synchronized block, which inturn is costly.



Option (c) seems to be a good solution to the above problem, the
CopyOnWriteArrayList class from util.concurrent (which will also appear in
the java.util.concurrent package in JDK 1.5) is a thread-safe implementation
of ArrayList that offers far better concurrency. Multiple reads can almost
always execute concurrently, simultaneous reads and writes can usually
execute concurrently, and multiple simultaneous writes can often execute
concurrently. Also CopyOnWriteArrayList contains a mutable reference to an
immutable array, so as long as that reference is held fixed, you get all the
thread-safety benefits of immutability without the need for locking.



I have opened a JIRA (Tuscany-2170) to fix this issue. Please suggest me if
this one is the right approach.
-- 
Thanks & Regards,
Ramkumar Ramalingam

Reply via email to