Collections里面的方法都是静态的,提供一些对集合进行操作的方法,如排序,反转等,所以是一个工具类。如我们平时使用的集合只有hashtable和vector是同步的,其他大多都是非同步的,如果我们要使平时使用的非同步集合变为同步的,就可以使用collections里面的方法,这个方法都是以synchronized开头的,如synchronizedList(List<T> list)
那么是怎么才把非同步实现为同步的呢,下面以synchronizedList(List<T> list)为例进行说明:
<T> List<T> synchronizedList(List<T> list) 返回指定列表支持的同步(线程安全的)列表。
class Collections{ //定义一个工具类,这是类名,调用里面函数用
public static List synchronizedList(List list){ //定义一个方法,我们用此方法来返回一个同步集合
return new MyList(list);
}
private class MyList implements List{//定义一个内部类,这是同步的集合类
private List list;
private static final Object lock = new Object(); //同步锁
MyList(List list){
this.list = list;
}
//这是对集合方法的实现,放在同步块内,然后直接调用参数集合的方法即可
public boolean add(Object obj){
synchronized(lock)
{
return list.add(obj);
}
}
public boolean remove(Object obj){
synchronized(lock)
{
return list.remove(obj);
}}}}
由此我们就实现了是集合同步,传递一个非同步集合进来,返回一个与之相同的同步集合。