<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Singleton Pattern in Java</title>
	<atom:link href="http://www.theserverside.de/singleton-pattern-in-java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.theserverside.de/singleton-pattern-in-java/</link>
	<description>Enterprise Java Software Development, Open Source, Datenbanken, Java Tutorials</description>
	<lastBuildDate>Tue, 10 Aug 2010 15:36:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: xtin</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5990</link>
		<dc:creator>xtin</dc:creator>
		<pubDate>Tue, 10 Aug 2010 15:36:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5990</guid>
		<description>I think the following should work. It&#039;s effectively the same as the double-checked locking but prevents the caveat of half-initialised objects by releasing the if-condition only when the object is fully created.

[code]
/**
* Implementierung des Singleton-Patterns mit synchronisiertem
* Zugriff auf die Instanziierung und einfacher Bedingungsprüfung
*/
public class VerySingleton {
    private static VerySingleton instance = null;
    private static Boolean created = false;
    /**
     * Default-Konstruktor, der nicht außerhalb dieser Klasse
     * aufgerufen werden kann
     */
    private VerySingleton() {}
 
    /**
     * Statische Methode, liefert die einzige Instanz dieser
     * Klasse zurück
     */
    public static VerySingleton getInstance() {
        if (!created) {
        	synchronized(VerySingleton.class) {
        		if(!created)
                	instance = new VerySingleton();
        		created = true;
            }
        }
        return instance;
    }
}
[/code]</description>
		<content:encoded><![CDATA[<p>I think the following should work. It&#8217;s effectively the same as the double-checked locking but prevents the caveat of half-initialised objects by releasing the if-condition only when the object is fully created.</p>
<p>[code]<br />
/**<br />
* Implementierung des Singleton-Patterns mit synchronisiertem<br />
* Zugriff auf die Instanziierung und einfacher Bedingungsprüfung<br />
*/<br />
public class VerySingleton {<br />
    private static VerySingleton instance = null;<br />
    private static Boolean created = false;<br />
    /**<br />
     * Default-Konstruktor, der nicht außerhalb dieser Klasse<br />
     * aufgerufen werden kann<br />
     */<br />
    private VerySingleton() {}</p>
<p>    /**<br />
     * Statische Methode, liefert die einzige Instanz dieser<br />
     * Klasse zurück<br />
     */<br />
    public static VerySingleton getInstance() {<br />
        if (!created) {<br />
        	synchronized(VerySingleton.class) {<br />
        		if(!created)<br />
                	instance = new VerySingleton();<br />
        		created = true;<br />
            }<br />
        }<br />
        return instance;<br />
    }<br />
}<br />
[/code]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Singleton-Pattern fr Datenbankverbindung - Forum Fachinformatiker.de</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5989</link>
		<dc:creator>Singleton-Pattern fr Datenbankverbindung - Forum Fachinformatiker.de</dc:creator>
		<pubDate>Tue, 02 Feb 2010 15:37:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5989</guid>
		<description>[...] dir mal den link hier an Singleton Pattern in Java  da stehen all die probleme drinne. habe jetzt das objekt beim ersten zugriff auf die klasse durch [...]</description>
		<content:encoded><![CDATA[<p>[...] dir mal den link hier an Singleton Pattern in Java  da stehen all die probleme drinne. habe jetzt das objekt beim ersten zugriff auf die klasse durch [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: wlz</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5988</link>
		<dc:creator>wlz</dc:creator>
		<pubDate>Fri, 29 Jan 2010 21:32:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5988</guid>
		<description>In Bezug auf den Satz:
&quot;Die zweite Bedingung if (instance == null) würde damit zu true evaluieren, ohne daß bisher der Konstruktor (Zeile 6) aufgerufen worden wäre. Das double-checked locking ist damit nicht sicher.&quot;

Da ich etwas verwirrt von dem komplizierten Satz war, und der Kommentar vom E.L auch nicht ganz korrekt ist, hier meine Version:

“Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im Thread B zu &quot;FALSE&quot; evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im Thread A fertig wird (und somit eine Instanz die zwar nicht null ist, aber noch nicht abgeschlossen-initialisiert wurde zurückgeben). In diesem Fall wird im zweiten Thread mit einem nicht (abgeschlossen-initialisierten “Objekt” gearbeitet!”

Und entsprechend den Satz:

&quot;Die zweite Bedingung if (instance == null) würde damit zu true evaluieren, ohne daß bisher der Konstruktor (Zeile 6) aufgerufen worden wäre.&quot;

ändern in den

“Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im Thread B zu FALSE evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im Thread A abgeschlossen wird. In diesem Fall wird im Thread B mit einem nicht abgeschlossen-initialisierten “Objekt” gearbeitet!”</description>
		<content:encoded><![CDATA[<p>In Bezug auf den Satz:<br />
&#8220;Die zweite Bedingung if (instance == null) würde damit zu true evaluieren, ohne daß bisher der Konstruktor (Zeile 6) aufgerufen worden wäre. Das double-checked locking ist damit nicht sicher.&#8221;</p>
<p>Da ich etwas verwirrt von dem komplizierten Satz war, und der Kommentar vom E.L auch nicht ganz korrekt ist, hier meine Version:</p>
<p>“Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im Thread B zu &#8220;FALSE&#8221; evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im Thread A fertig wird (und somit eine Instanz die zwar nicht null ist, aber noch nicht abgeschlossen-initialisiert wurde zurückgeben). In diesem Fall wird im zweiten Thread mit einem nicht (abgeschlossen-initialisierten “Objekt” gearbeitet!”</p>
<p>Und entsprechend den Satz:</p>
<p>&#8220;Die zweite Bedingung if (instance == null) würde damit zu true evaluieren, ohne daß bisher der Konstruktor (Zeile 6) aufgerufen worden wäre.&#8221;</p>
<p>ändern in den</p>
<p>“Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im Thread B zu FALSE evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im Thread A abgeschlossen wird. In diesem Fall wird im Thread B mit einem nicht abgeschlossen-initialisierten “Objekt” gearbeitet!”</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5983</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Sat, 04 Jul 2009 17:59:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5983</guid>
		<description></description>
		<content:encoded><![CDATA[<p>[...] den Quellcode dazu). 3. Wie Akeshihiro aiuch sagte, knnte dir ein Singleton ebenfalls helfen: <a href="http://www.theserverside.de/singleton-pattern-in-java/" rel="nofollow"></a><a href='http://www.theserverside.de/singleton-pattern-in-java/'>http://www.theserverside.de/singleton-pattern-in-java/</a>    __________________ Handlanger des Dr. Ex1tus  Ich kenne Matzes dunkles Geheimnis ! oO  o L_/ OL [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rias A. Sherzad</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5979</link>
		<dc:creator>Rias A. Sherzad</dc:creator>
		<pubDate>Mon, 12 Jan 2009 21:57:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5979</guid>
		<description>&lt;i&gt;&lt;blockquote&gt;und noch etwas weiter:
3) statt “Zwischen der zweiten und der vierten Zeile …” sollte es sein “Zwischen der 4. und der 6. Zeile …”&lt;/blockquote&gt;&lt;/i&gt;Das war einfach, erledigt - thanks :-)</description>
		<content:encoded><![CDATA[<p><i><br />
<blockquote>und noch etwas weiter:<br />
3) statt “Zwischen der zweiten und der vierten Zeile …” sollte es sein “Zwischen der 4. und der 6. Zeile …”</p></blockquote>
<p></i>Das war einfach, erledigt &#8211; thanks :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: E.L.</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5978</link>
		<dc:creator>E.L.</dc:creator>
		<pubDate>Mon, 12 Jan 2009 21:53:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5978</guid>
		<description>Gern geschehen :)</description>
		<content:encoded><![CDATA[<p>Gern geschehen :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: E.L.</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5977</link>
		<dc:creator>E.L.</dc:creator>
		<pubDate>Mon, 12 Jan 2009 21:52:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5977</guid>
		<description>und noch etwas weiter:
3) statt &quot;Zwischen der zweiten und der vierten Zeile ...&quot; sollte es sein &quot;Zwischen der 4. und der 6. Zeile ...&quot;</description>
		<content:encoded><![CDATA[<p>und noch etwas weiter:<br />
3) statt &#8220;Zwischen der zweiten und der vierten Zeile &#8230;&#8221; sollte es sein &#8220;Zwischen der 4. und der 6. Zeile &#8230;&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rias A. Sherzad</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5976</link>
		<dc:creator>Rias A. Sherzad</dc:creator>
		<pubDate>Mon, 12 Jan 2009 21:49:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5976</guid>
		<description>Vielen Dank für den Beitrag!
Tatsächlich ist der Artikel in seinen technischen Details an einigen Stellen wahrscheinlich nicht mehr auf dem aktuellen Stand, bzw. ungenau oder sogar fehlerhaft. Sobald ich die Zeit finde werde ich das Feedback einbauen, auch das aus mir zugesandten E-Mails.
Danke nochmals!</description>
		<content:encoded><![CDATA[<p>Vielen Dank für den Beitrag!<br />
Tatsächlich ist der Artikel in seinen technischen Details an einigen Stellen wahrscheinlich nicht mehr auf dem aktuellen Stand, bzw. ungenau oder sogar fehlerhaft. Sobald ich die Zeit finde werde ich das Feedback einbauen, auch das aus mir zugesandten E-Mails.<br />
Danke nochmals!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: E.L.</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5975</link>
		<dc:creator>E.L.</dc:creator>
		<pubDate>Mon, 12 Jan 2009 21:43:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5975</guid>
		<description>Ein guter Artikel.

Anmerkungen zu &quot;Double-checked locking&quot;:

1) mit dem Speichermodell der Java-Plattform hat das nichts zu tun. Das ist einfach so allgemein möglich, dass es zunächst der Referenz die Adresse des allozierten Speicher zugewiesen und erst danach der Konstruktor aufgerufen wird.

2) statt 
&quot;Die zweite Bedingung if (instance == null) in Zeile 23 kann nämlich zu true evaluieren, ohne daß new DoubleCheckedLockingSingleton() aufgerufen, und das instanziierte Objekt dem Klassenattribut instance zugewiesen wurde!&quot;

sollte es ungefähr so heißen :
&quot;Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im zweiten Thread zu true evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im ersten Thread aufgerufen wird. In diesem Fall wird im zweiten Thread mit einem nicht (korrekt) initialisierten &quot;Objekt&quot; gearbeitet!&quot;</description>
		<content:encoded><![CDATA[<p>Ein guter Artikel.</p>
<p>Anmerkungen zu &#8220;Double-checked locking&#8221;:</p>
<p>1) mit dem Speichermodell der Java-Plattform hat das nichts zu tun. Das ist einfach so allgemein möglich, dass es zunächst der Referenz die Adresse des allozierten Speicher zugewiesen und erst danach der Konstruktor aufgerufen wird.</p>
<p>2) statt<br />
&#8220;Die zweite Bedingung if (instance == null) in Zeile 23 kann nämlich zu true evaluieren, ohne daß new DoubleCheckedLockingSingleton() aufgerufen, und das instanziierte Objekt dem Klassenattribut instance zugewiesen wurde!&#8221;</p>
<p>sollte es ungefähr so heißen :<br />
&#8220;Die *erste* Bedingung if (instance == null) in Zeile *21* kann nämlich im zweiten Thread zu true evaluieren, *bevor* der Konstruktor DoubleCheckedLockingSingleton() im ersten Thread aufgerufen wird. In diesem Fall wird im zweiten Thread mit einem nicht (korrekt) initialisierten &#8220;Objekt&#8221; gearbeitet!&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Singleton in Java &#8212; ingokallenbach.de</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5974</link>
		<dc:creator>Singleton in Java &#8212; ingokallenbach.de</dc:creator>
		<pubDate>Sun, 17 Aug 2008 12:09:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5974</guid>
		<description>[...] Artikel Singleton Pattern in Java beschreibt einige Implementierungen des Singletons in Java, bevor am Ende auf die bisher oft [...]</description>
		<content:encoded><![CDATA[<p>[...] Artikel Singleton Pattern in Java beschreibt einige Implementierungen des Singletons in Java, bevor am Ende auf die bisher oft [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rias A. Sherzad</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5964</link>
		<dc:creator>Rias A. Sherzad</dc:creator>
		<pubDate>Mon, 24 Sep 2007 21:50:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5964</guid>
		<description>Ja, das sagt der Artikel aber auch...</description>
		<content:encoded><![CDATA[<p>Ja, das sagt der Artikel aber auch&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nitram</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-5853</link>
		<dc:creator>nitram</dc:creator>
		<pubDate>Mon, 18 Jun 2007 09:54:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-5853</guid>
		<description>Der Artikel ist wirklich gut geschrieben, hat nur einen kleinen Haken: das double checked locking idiom gilt als &quot;gebrochen&quot;.

Siehe:
&lt;a href=&quot;http://en.wikipedia.org/wiki/Double-checked_locking&quot;&gt;http://en.wikipedia.org/wiki/Double-checked_locking&lt;/a&gt;</description>
		<content:encoded><![CDATA[<p>Der Artikel ist wirklich gut geschrieben, hat nur einen kleinen Haken: das double checked locking idiom gilt als &#8220;gebrochen&#8221;.</p>
<p>Siehe:<br />
<a href="http://en.wikipedia.org/wiki/Double-checked_locking"></a><a href='http://en.wikipedia.org/wiki/Double-checked_locking'>http://en.wikipedia.org/wiki/Double-checked_locking</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rias A. Sherzad</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-23</link>
		<dc:creator>Rias A. Sherzad</dc:creator>
		<pubDate>Sat, 02 Sep 2006 11:04:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-23</guid>
		<description></description>
		<content:encoded><![CDATA[<blockquote><p>Der Artikel ist schön geschrieben.</p></blockquote>
<p>Danke schön :-)</p>
<p>Die von Ihnen genannten Nachteile existieren in der Tat. Als das Singleton-Pattern in der Java-Welt seinen Einzug gefunden hat, waren Testing-Frameworks   la JUnit nicht/kaum existent, so &#8211; und das ist meine Interpretation &#8211; daß das automatisierte Testing im Hintergrund stand.<br />
Das Inversion of Control Pattern hingegen gibt es erst seit wenigen Jahren (2-3?) und kann einige der Probleme lösen. IoC wird auch Thema einer meiner (oder Ihrer? :-)) nächsten Artikel sein.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Florian Strauch</title>
		<link>http://www.theserverside.de/singleton-pattern-in-java/comment-page-1/#comment-20</link>
		<dc:creator>Florian Strauch</dc:creator>
		<pubDate>Fri, 01 Sep 2006 11:56:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.theserverside.de/singleton-pattern-in-java/#comment-20</guid>
		<description>Der Artikel ist schön geschieben. Die Umsetzung des Singleton Pattern in dieser - klassischen - Form bringt aber mehr Nachteile mit sich, die angesprochen werden sollten.

Eigentlich ist ein Sigleton als Objekt-Muster gedacht. Die dargestellte Implementierung stellt zwar sicher, dass es nur eine Instanz der Klasse geben kann, aber als Nebeneffekt ist diese Instanz damit auch global verfügbar.

Eberhard Wolf schreibt in &lt;a href=http://jandiandme.blogspot.com/2006/07/vom-pattern-zum-anti-pattern.html title=Vom Pattern zum Anti-Pattern?&gt;Vom Pattern zum Anti-Pattern&lt;/a&gt;:
&lt;blockquote cite=\&quot;Das Singleton ist überall im Code bekannt und kann verwendet werden, ohne dass man dies von außen erkennen kann. Dadurch wird Testing und isolierte Wiederverwendbarkeit schwierig.\&quot;&gt;

Wenn das Singleton dann noch in anderen Klassen direkt im Code oder versteckt in Feld-Initialisierungen oder Konstruktoren referenziert wird, dann ist isoliertes Testen unmöglich.</description>
		<content:encoded><![CDATA[<p>Der Artikel ist schön geschieben. Die Umsetzung des Singleton Pattern in dieser &#8211; klassischen &#8211; Form bringt aber mehr Nachteile mit sich, die angesprochen werden sollten.</p>
<p>Eigentlich ist ein Sigleton als Objekt-Muster gedacht. Die dargestellte Implementierung stellt zwar sicher, dass es nur eine Instanz der Klasse geben kann, aber als Nebeneffekt ist diese Instanz damit auch global verfügbar.</p>
<p>Eberhard Wolf schreibt in <a href=http://jandiandme.blogspot.com/2006/07/vom-pattern-zum-anti-pattern.html title=Vom Pattern zum Anti-Pattern?>Vom Pattern zum Anti-Pattern</a>:</p>
<blockquote cite=\"Das Singleton ist überall im Code bekannt und kann verwendet werden, ohne dass man dies von außen erkennen kann. Dadurch wird Testing und isolierte Wiederverwendbarkeit schwierig.\">
<p>Wenn das Singleton dann noch in anderen Klassen direkt im Code oder versteckt in Feld-Initialisierungen oder Konstruktoren referenziert wird, dann ist isoliertes Testen unmöglich.</p></blockquote>
]]></content:encoded>
	</item>
</channel>
</rss>
