Um die Probleme und Lösungen für Parallelität in Java richtig zu verstehen, ging ich durch das offizielle Java-Tutorial. Auf einer der Seiten definierten sie Intrinsic Locks und Synchronisationlink. Auf dieser Seite sagen sie das:Was bedeutet intrinsische Sperre eigentlich für eine Java-Klasse?
Solange ein Thread eine intrinsische Sperre besitzt, kann kein anderer Thread die gleiche Sperre erwerben. Der andere Thread wird blockiert, wenn er versucht, die Sperre zu zu erlangen.
Auch erwähnen sie im Abschnitt Locks in synchronisierter Methods dass:
Wenn ein Thread eine synchronisierte Methode aufruft, automatisch es für diese Methode des Objekts und gibt die intrinsische Sperre erlangt, wenn Die Methode kehrt zurück. Die Sperrfreigabe tritt auf, selbst wenn die Rückgabe durch eine nicht abgefangene Ausnahme verursacht wurde.
für mich, dies bedeutet, dass sobald ich eine synchronisierte Methode aus einem der Fäden nennen, halte ich der intrinsischen Verriegelung des Fadens haben und da
Intrinsic Schlösser eine Rolle in beiden Aspekten spielen der Synchronisation: erzwingt den exklusiven Zugriff auf den Status eines Objekts und passiert vor Beziehungen, die für die Sichtbarkeit unerlässlich sind.
Wäre ein anderer Thread nicht in der Lage, eine andere synchronisierte Methode derselben Klasse aufzurufen? Wenn ja, dann ist der ganze Zweck der synchronisierten Methoden besiegt. Ist es nicht?
Ihre Frage ist mehrdeutig. Worauf bezieht sich "Ich", wenn Sie fragen: "Wäre ich nicht in der Lage, eine andere synchronisierte Methode aufzurufen ..."? Rahmen Sie Ihre Frage in Bezug auf Threads. Fragen Sie, ob der gleiche Thread eine synchronisierte Methode von einer synchronisierten Methode aufrufen kann? D.h., sind Java-Intrinsic-Locks reentrant? Oder fragst du den Nutzen eines Mutex? – erickson
Intrinsic-Methode bedeutet, dass Sie kein Objekt zum Synchronisieren Ihrer Methoden erstellen müssen. Im Vergleich dazu können Sie eine extrinsische Sperre verwenden, indem Sie 'synchronized (myLock) {...}' aufrufen. Dies ist ein Auszug aus dem Buch Java Concurrency in der Praxis: "Die Tatsache, dass jedes Objekt eine integrierte Sperre hat, ist nur eine Annehmlichkeit, so dass Sie nicht explizit Sperrobjekte erstellen müssen" –
Ich habe gerade die Frage aktualisiert, um die erwähnte Mehrdeutigkeit zu verdeutlichen von der @erickson .. – Swapnil