Ich habe diese in einem Interview gefragt.
Müssen wir in einer gleichzeitigen Umgebung auf die Klonmethode achten? Können wir die Klonmethode synchronisieren?
Macht es Sinn, die clone-Methode in Singleton-Klassen zu verwenden?
Ich hatte dafür während des Interviews keine überzeugenden Antworten.
Wahrscheinlich ja 99,99% der Fälle, aber Sie müssen sich einfach wie jede andere Methode Ihrer Klasse an Klone erinnern und diese bei Bedarf in Abhängigkeit von Ihrem spezifischen Kontext synchronisieren. Es ist nichts falsch daran, eine Methode zu synchronisieren, die in ihrer Basisklasse nicht synchronisiert ist. Auf der anderen Seite ist das Synchronisieren einer Methode beim Überschreiben einer synchronisierten Methode wahrscheinlich ein Fehler , selbst wenn der Code korrekt kompiliert wird und keine Warnungen ausgegeben werden ...
Eine überzeugende Antwort wäre wahrscheinlich NEIN mit ein paar Wörtern auf dem Singleton-Designmuster.
Wenn Sie ein Objekt klonen, das in anderen Threads geändert werden kann, müssen Sie wahrscheinlich eine Art von [read] -Sperre anfordern, so als würden Sie eine andere Operation ausführen. Theoretisch würden Sie eine Sperre für das neue Objekt benötigen, wenn es jemals einer unsicheren Veröffentlichung unterzogen werden könnte (ich schlage vor, veränderbares Objekt nicht unsicher zu veröffentlichen!).
Es wäre kein Singleton, wenn Sie eine andere Instanz davon machen könnten (es gibt das Monostat-Antipattern, das wie das Singleton-Antipattern ist, nur schlimmer und kann mehrere Objekte für keinen klaren Zweck beinhalten). Ich nehme an, wenn Sie eine Klasse subklassieren, die Cloneable
implementiert hat, möchten Sie clone
überschreiben und CloneNotSupportedException
ist entweder möglich oder geben Sie this
zurück.
Tags und Links java singleton concurrency clone