私はクラスをロックすると、クラス変数もロックされますか? - Javaの
public class Example{
public static List<String> list = new ArrayList<String>();
public static void addElement(String val){
synchronized(list){
list.add(val);
}
}
public static synchronized void printElement(){
Iterator<String> it = list.iterator();
while(it.hasNext()){
//print element
}
}
}
以下のクラスを持っているprintElement方法でイテレータ()の呼び出しはConcurrentModificationExceptionをスローしますか?基本的な質問は、クラスオブジェクトのロックが取得された場合(printElementメソッドの場合と同様)、クラスメンバー/変数もロックされますか?答えで私を助けてください。
2つのロックを使用するとデッドロックが発生する可能性がありますので、メソッドのシグネチャ内でsynchronizedを削除します。 – Simiil
@Simiil:*任意の*ロックによりデッドロックが発生する可能性があります。 :-)しかし、ええ、私はそれを削除しました。質問に示されていない理由がない限り、必要ではないはずですから。 –
ロックは実際には何もロックしません。それは何かをロックするために使用されます:) – extraneon