对与集合的同步,方法之一是使用 Collections :
如以下方法:
Collections.synchronizedCollection(Collection<T> c)
返回的是一个 Collection 对象的装饰者对象 ,这个装饰者对象的所有方法都是同步的
public static <T> Collection<T> synchronizedCollection(Collection<T> c) {
return new SynchronizedCollection<T>(c);
}
看下SynchronizedCollection:
它是Collections的一个静态内部类
static class SynchronizedCollection<E> implements Collection<E>, Serializable
两个重要属性:
final Collection<E> c; // 被装饰者
final Object mutex; //当前SynchronizedCollection 对象 作为同步锁使用
SynchronizedCollection(Collection<E> c) {
if (c==null)
throw new NullPointerException();
this.c = c;
mutex = this;
}
它的同步方法
public boolean add(E e) {
synchronized(mutex) {return c.add(e);}
}
public boolean remove(Object o) {
synchronized(mutex) {return c.remove(o);}
}