// from gee.cs.oswego.edu/home/jsr166/jsr166 package jsr166tests.loops; /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain */ // Stand-alone version of java.util.Collections.synchronizedCollection import java.util.*; import java.io.*; public final class SynchronizedCollection<E> implements Collection<E>, Serializable { final Collection<E> c; // Backing Collection final Object mutex; // Object on which to synchronize public SynchronizedCollection(Collection<E> c) { if (c==null) throw new NullPointerException(); this.c = c; mutex = this; } public SynchronizedCollection(Collection<E> c, Object mutex) { this.c = c; this.mutex = mutex; } public SynchronizedCollection() { this(new ArrayList<E>()); } public final int size() { synchronized(mutex) {return c.size();} } public final boolean isEmpty() { synchronized(mutex) {return c.isEmpty();} } public final boolean contains(Object o) { synchronized(mutex) {return c.contains(o);} } public final Object[] toArray() { synchronized(mutex) {return c.toArray();} } public final <T> T[] toArray(T[] a) { synchronized(mutex) {return c.toArray(a);} } public final Iterator<E> iterator() { return c.iterator(); } public final boolean add(E e) { synchronized(mutex) {return c.add(e);} } public final boolean remove(Object o) { synchronized(mutex) {return c.remove(o);} } public final boolean containsAll(Collection<?> coll) { synchronized(mutex) {return c.containsAll(coll);} } public final boolean addAll(Collection<? extends E> coll) { synchronized(mutex) {return c.addAll(coll);} } public final boolean removeAll(Collection<?> coll) { synchronized(mutex) {return c.removeAll(coll);} } public final boolean retainAll(Collection<?> coll) { synchronized(mutex) {return c.retainAll(coll);} } public final void clear() { synchronized(mutex) {c.clear();} } public final String toString() { synchronized(mutex) {return c.toString();} } private void writeObject(ObjectOutputStream s) throws IOException { synchronized(mutex) {s.defaultWriteObject();} } }