Ich habe 2 synchronisierte Methoden in einer Klasse say method1() und method2(). Ein Thread sagen "Thread 1" hält die Sperre für dieses Objekt der Klasse durch Ausführen der synchronisierten Methode1(). Kann ein anderer Thread sagen "Thread 2", Zugriff auf die Sperre über Methode2() zur gleichen Zeit während "Thread 1" halten das Schloss.zwei verschiedene synchronisierte Methoden des gleichen Objekts?
Dieser Fall ist analog zu java.util.Vector Klasse mit synchronisierten add() und remove() Methoden. Bitte erläutern Sie auch diesen Fall.
Dank Borealid .. Aber wenn dies der Fall ist, warum Java-Synchronisation spezifische Methoden bietet, kann es nur für die vorgesehenen ganze Klasse? – JavaUser
@JavaUser: 'synchronisiert (this)' bedeutet nicht, dass die ganze Klasse "synchronisiert" ist. Dies bedeutet, dass Sie die Objektsperre der Instanz erhalten, auf der die Methode aufgerufen wurde. Sie wollen nicht unbedingt, dass * alle * Methoden 'synchronisiert' werden (in der Tat werden Sie dies selten tun). Um die Leistung von Multithread-Code zu erhalten, müssen Sie so wenig Sperren wie möglich verwenden, während die Programmkorrektheit erhalten bleibt. Jedes Mal, wenn Sie eine Contended-Sperre haben, warten einige Threads und tun nichts. – Borealid
@ Borealid .. der Moment, den ich in einer beliebigen Methode synchronisiert bedeutet, ist das ganze Objekt gesperrt, wenn ich diese Methode aufrufen .. bin ich richtig? – JavaUser