Heim > Java > Zweimal auf dasselbe Objekt synchronisieren?

Zweimal auf dasselbe Objekt synchronisieren?

WBOY
Freigeben: 2024-02-06 11:45:09
nach vorne
578 Leute haben es durchsucht
Inhalt der Frage

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();
        }
    }
}
Nach dem Login kopieren

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.


Die richtige Antwort


kann erneut eingegeben werden

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.

Siehe

Java-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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage