Einzelne Instanziierung mit Argumenten
Habe ich eine Klasse (RInterfaceHL), die Anrufe einer anderen Klasse (JRIEngine), die native Methoden auf einem single-threaded-Anwendung. Also ich will nur eine einzige Instanz meiner Klasse (RInterfaceHL) pro JVM.
Kann ich die singleton-Muster mit statischen Initialisierung, um sicherzustellen, dass nur eine einzelne Instanziierung von RInterfaceHL, aber RInterfaceHL muss, erstellen Sie eine Instanz der JRIEngine und versorgen Sie mit einem loopback-parameter. Wie kann ich in eine thread-sichere Weise in einer einzigen Instanz RInterfaceHL akzeptiert eine loopback-parameter für den Bau eines einzigen JRIEngine? Ich bin mit JDK6.
NB: Diese ähnlich benannten Frage keine Antwort auf meine Frage.
- Beachten Sie, dass Singletons sind nicht pro JVM, aber pro classloader. Das singleton-pattern in Java wird erhalten, indem die Klasse mit dual-Aufgaben - Instanz-Erstellung und der tatsächlichen Verantwortung. Der Instanz-Erstellung Verantwortung umgegangen wird, wenn die Klasse geladen wird, indem der classloader (und es können auch mehrere sein classloadern pro JVM).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Änderung des Singleton-Muster verwendet Bill Pugh der initialization on demand holder idiom. Dies ist thread-sicher, ohne den Aufwand für spezielle Sprachkonstrukte (d.h. flüchtige oder synchronisiert):
EDIT: ich sollte hinzufügen, dass, wenn Sie sind, Dinge aufzubauen, zu laufen in einem servlet oder ähnliche Behälter, mit dem reinen Singleton-Muster ist wahrscheinlich eine schlechte Idee. Einer der IoC /dependency injection-Mechanismen ist eine bessere Idee; z.B. Frühling wie vorgeschlagen in einer anderen Antwort. Dadurch können Sie den Gültigkeitsbereich des "Singleton" auf den container.
Es wäre des guten zuviel, wenn Sie nur tun, ein kleines Programm, aber ein dependency injection framework wie Spring Framework kann Ihnen singleton-Verhalten, ohne die Notwendigkeit, manuell zu konstruieren und initialisieren Sie das statische Objekt von hand.
Dependency injection "container" zu konstruieren und verdrahten Sie singleton und seine Abhängigkeit von Klassen zusammen, und kann so konfiguriert werden, um Ihrem Objekt ein singleton-Instanz innerhalb des Containers.
Gibt es ein bisschen eine Lernkurve, wenn Sie nicht verwendet haben Frühling vor, aber es ist ein sehr beliebtes framework, und wahrscheinlich wird Sie gut dienen.