Heim >Java >Zweimal auf dasselbe Objekt synchronisieren?

Zweimal auf dasselbe Objekt synchronisieren?

WBOY
WBOYnach vorne
2024-02-06 11:45:09576Durchsuche
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();
        }
    }
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen