Eine Klasse so sein Thread-sicher ist synchronisieren?
Eine Klasse ist nicht synchronisiert. Stattdessen wird eine Methode oder ein Codeblock synchronisiert.
Die Synchronisierung (unter Verwendung von synchronized
) ist eine Möglichkeit, Code threadsicher zu machen. Es gibt andere Möglichkeiten.
Oder synchronisieren und thread-safe haben zwei verschiedene Bedeutungen?
Ja. Sie haben unterschiedliche Bedeutungen.
und ich habe oft bemerkt, dass einige Klasse synchronisieren und Thread-sicher, was bedeutet, zu einer Zeit, nur ein Thread den Code zugreifen kann.
Eigentlich, wenn Sie "bemerkt", dass Sie nicht aufgepasst!
Mit einer synchronized
Methode kann nur ein Thread auf den Code zugreifen, während eine bestimmte Sperre gehalten wird; Sie erhalten einen gegenseitigen Ausschluss. Wenn zwei Threads verschiedene Sperren verwenden, erhalten Sie nicht gegenseitigen Ausschluss.
Die andere Sache zu beachten ist, dass nur die Verwendung synchronized
garantiert Thread-Sicherheit nicht. Sie müssen sie in der richtigen Weise nutzen:
- Threads auf die entsprechenden Objekte/Schlösser
- Fäden in allen geeigneten Code
- synchronisieren müssen synchronisiert werden müssen, wenn der Code mehrere Schlösser bringt den Erwerb, die Schlösser müssen in einer Reihenfolge erworben werden, die Deadlocks vermeidet.
Wahrscheinlich ein Duplikat von http://stackoverflow.com/questions/32163445/what-do-the-terms-synchronized-and-thread-safe-mean –