Ich würde gerne wissen, ob es in Java zu seltsamem Verhalten kommt, wenn ich zweimal dasselbe Objekt synchronisiere?
Die Szene ist wie folgt
pulbic class SillyClassName { object moo; ... public void method1(){ synchronized(moo) { .... method2(); .... } } public void method2(){ synchronized(moo) { doStuff(); } } }
Beide Methoden verwenden dieses Objekt und synchronisieren darauf. Wenn die erste Methode die zweite Methode aufruft, stoppt die zweite Methode dann, weil sie gesperrt ist?
Das glaube ich nicht, da es sich um denselben Thread handelt, aber ich bin mir nicht sicher, ob noch andere seltsame Ergebnisse auftreten.
Synchronisierte Blöcke verwenden reentrant-Sperren, was bedeutet, dass ein Thread, wenn er bereits eine Sperre hält, diese problemlos erneut erhalten kann. Ihr Code funktioniert also wie erwartet.
SieheJava-Tutorial unten auf der Seite Intrinsische Sperren und Synchronisierung.
Zitat vom Januar 2015...Ich denke, wir müssen eine Wiedereintrittssperre verwenden, um das zu erreichen, was Sie tun möchten. Hier ist ein Ausschnitt von
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReentrantLock.html.
Obwohl ich es noch nicht ausprobiert habe, denke ich, dass Sie eine Wiedereintrittssperre verwenden müssen, wenn Sie das oben Genannte tun möchten.Das obige ist der detaillierte Inhalt vonZweimal auf dasselbe Objekt synchronisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!