スレッドセーフの観点から、Vector クラスと ArrayList クラスの違いを理解しようとしています。ベクトルはおそらく内部的に同期されています。各要素ごとに同期されていますか、それとも全体として同期されていますか? (複数のスレッドが同時にベクトルにアクセスできるケースは想像できましたが、複数のスレッドが同じ要素に同時にアクセスすることはできませんでした)。以下のコードを見ると、私の知る限りでは、キーワードがメソッド シグネチャで使用されると、それを含むクラス オブジェクト (のインスタンス) で同期されるため、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;
}
}