EDU.oswego.cs.dl.util.concurrent

Class CopyOnWriteArraySet

public class CopyOnWriteArraySet extends AbstractSet implements Cloneable, Serializable

This class implements a java.util.Set that uses a CopyOnWriteArrayList for all of its operations. Thus, it shares the same basic properties:

Sample Usage. Probably the main application of copy-on-write sets are classes that maintain sets of Handler objects that must be multicasted to upon an update command. This is a classic case where you do not want to be holding a synch lock while sending a message, and where traversals normally vastly overwhelm additions.

 class  Handler { void handle(); ... }

 class X {
    private final CopyOnWriteArraySet handlers = new CopyOnWriteArraySet();
    public void addHandler(Handler h) { handlers.add(h); }
   
    private long internalState;
    private synchronized void changeState() { internalState = ...; }
 
    public void update() {
       changeState();
       Iterator it = handlers.iterator();
       while (it.hasNext())
          ((Handler)(it.next()).handle();
    }
 }
 

[ Introduction to this package. ]

See Also:

Field Summary
protected CopyOnWriteArrayListal
Constructor Summary
CopyOnWriteArraySet()
Constructs an empty set
CopyOnWriteArraySet(Collection c)
Constructs a set containing all of the elements of the specified Collection.
Method Summary
booleanadd(Object o)
booleanaddAll(Collection c)
voidclear()
booleancontains(Object o)
booleancontainsAll(Collection c)
booleanisEmpty()
Iteratoriterator()
booleanremove(Object o)
booleanremoveAll(Collection c)
booleanretainAll(Collection c)
intsize()
Object[]toArray()
Object[]toArray(Object[] a)

Field Detail

al

protected final CopyOnWriteArrayList al

Constructor Detail

CopyOnWriteArraySet

public CopyOnWriteArraySet()
Constructs an empty set

CopyOnWriteArraySet

public CopyOnWriteArraySet(Collection c)
Constructs a set containing all of the elements of the specified Collection.

Method Detail

add

public boolean add(Object o)

addAll

public boolean addAll(Collection c)

clear

public void clear()

contains

public boolean contains(Object o)

containsAll

public boolean containsAll(Collection c)

isEmpty

public boolean isEmpty()

iterator

public Iterator iterator()

remove

public boolean remove(Object o)

removeAll

public boolean removeAll(Collection c)

retainAll

public boolean retainAll(Collection c)

size

public int size()

toArray

public Object[] toArray()

toArray

public Object[] toArray(Object[] a)