我们都知道,Collections这个类封装了对集合操作的一些静态方法,比如,我们经常用到的集合进行排序操作sort(List<T> list) 方法.,swap(List<?> list, int i, int j),对集合中位置的替换操作。等等这些可以在Collections api文档中可以看到,在这里我就不一一解释了。我在api文档中看到,可以对非同步进行同步操作,synchronizedList
好奇心的我决定看下他的源码:
这个是通过synchronizedList这个方法点进来的。我们可以看到这个方法中new SynchronizedList<T>(list),在找到这个类
mutex由此可以说明这个是同一个锁,所以,这个Collections实现了对非同步能进行同步操作。
好奇心的我决定看下他的源码:
public static <T> List<T> synchronizedList(List<T> list) {
return (list instanceof RandomAccess ?
new SynchronizedRandomAccessList<T>(list) :
new SynchronizedList<T>(list));
}
这个是通过synchronizedList这个方法点进来的。我们可以看到这个方法中new SynchronizedList<T>(list),在找到这个类
static class SynchronizedList<E>
extends SynchronizedCollection<E>
implements List<E> {
static final long serialVersionUID = -7754090372962971524L;
final List<E> list;
SynchronizedList(List<E> list) {
super(list);
this.list = list;
}
SynchronizedList(List<E> list, Object mutex) {
super(list, mutex);
this.list = list;
}
可以看到在这里这个类,并且继承了一个类。我们暂且不管,我们可以看到他的构造方法中对这个list进行了初始化.在这个类中对其list进行一系列的操作,我们去看下他们对list做了哪些操作.
public void add(int index, E element) {
synchronized(mutex) {list.add(index, element);}
}
public E remove(int index) {
synchronized(mutex) {return list.remove(index);}
}
当我们看到这个方法时,是不是有一种恍然大悟的感觉,在这个方法中给他加了synchronized这个锁,并且还是同一个对象
mutex由此可以说明这个是同一个锁,所以,这个Collections实现了对非同步能进行同步操作。