我试图了解 Vector 和 ArrayList 类在线程安全方面的区别。Vector 应该是内部同步的。它是由每个元素同步的,还是作为一个整体同步的?(我可以想象多个线程可以同时访问向量,但多个线程不能同时访问同一个元素的情况)。如果您查看下面的代码,getAo()
则不等于,getV()
因为据我所知synchronized
,在方法签名中使用的关键字会在包含的类对象( 的实例)上同步。VectorVsArrayList
但是,getAoSync()
相当于getV()
?等同于,我的意思是ao
只要对实例变量的所有访问都通过getter方法,就同步而言,实例变量开始表现得像一个Vector对象?
public class VectorVsArrayList {
private ArrayList<?> ao = null;
private Vector<?> v = null;
public ArrayList<?> getAoSync(){
synchronized(ao){
return ao;
}
}
public synchronized ArrayList<?> getAo() {
return ao;
}
public Vector<?> getV() {
return v;
}
}