Ich habe die unten KlasseVerriegelt eine Klasse, sperrt auch Klassenvariablen? - 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
}
}
}
Wird der iterator() -Aufruf in der printElement Methode ConcurrentModificationException werfen? Die grundlegende Frage ist, ob die Sperre für das Klassenobjekt erhalten wird (wie in der Methode printElement), wird es auch die Klassenmitglieder/Variablen sperren? Bitte hilf mir bei der Antwort.
mit zwei Sperren möglicherweise einige fiese Deadlocks führen, so würde ich die synchronisierte in der Methode Signatur entfernen – Simiil
@Simil: * Any * Sperre kann zu einem Deadlock führen. :-) Aber ja, ich habe es entfernt, da es nicht notwendig sein sollte, außer es gibt einen Grund, der in der Frage nicht gezeigt wird. –
Ein Schloss sperrt eigentlich nichts. Es wird verwendet, um etwas zu sperren :) – extraneon