﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Java小鱼-文章分类-Pattern</title><link>http://www.blogjava.net/shenkh/category/35661.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 30 Oct 2008 10:02:14 GMT</lastBuildDate><pubDate>Thu, 30 Oct 2008 10:02:14 GMT</pubDate><ttl>60</ttl><item><title>几种Singleton模式的java实现</title><link>http://www.blogjava.net/shenkh/articles/237601.html</link><dc:creator>Java小鱼</dc:creator><author>Java小鱼</author><pubDate>Thu, 30 Oct 2008 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/shenkh/articles/237601.html</guid><wfw:comment>http://www.blogjava.net/shenkh/comments/237601.html</wfw:comment><comments>http://www.blogjava.net/shenkh/articles/237601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shenkh/comments/commentRss/237601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shenkh/services/trackbacks/237601.html</trackback:ping><description><![CDATA[<a title="Initialization on demand holder idiom" href="http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom">Initialization on demand holder idiom</a> <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_23_513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_513_Open_Text.style.display='none'; Codehighlighter1_23_513_Closed_Image.style.display='inline'; Codehighlighter1_23_513_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_513_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_513_Closed_Text.style.display='none'; Codehighlighter1_23_513_Open_Image.style.display='inline'; Codehighlighter1_23_513_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton&nbsp;</span><span id="Codehighlighter1_23_513_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_23_513_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Protected&nbsp;constructor&nbsp;is&nbsp;sufficient&nbsp;to&nbsp;suppress&nbsp;unauthorized&nbsp;calls&nbsp;to&nbsp;the&nbsp;constructor</span><span style="color: #008000"><br />
<img id="Codehighlighter1_142_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_143_Open_Text.style.display='none'; Codehighlighter1_142_143_Closed_Image.style.display='inline'; Codehighlighter1_142_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_142_143_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_142_143_Closed_Text.style.display='none'; Codehighlighter1_142_143_Open_Image.style.display='inline'; Codehighlighter1_142_143_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Singleton()&nbsp;</span><span id="Codehighlighter1_142_143_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_142_143_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img id="Codehighlighter1_150_310_Open_Image" onclick="this.style.display='none'; Codehighlighter1_150_310_Open_Text.style.display='none'; Codehighlighter1_150_310_Closed_Image.style.display='inline'; Codehighlighter1_150_310_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_150_310_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_150_310_Closed_Text.style.display='none'; Codehighlighter1_150_310_Open_Image.style.display='inline'; Codehighlighter1_150_310_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_150_310_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_150_310_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SingletonHolder&nbsp;is&nbsp;loaded&nbsp;on&nbsp;the&nbsp;first&nbsp;execution&nbsp;of&nbsp;Singleton.getInstance()&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;or&nbsp;the&nbsp;first&nbsp;access&nbsp;to&nbsp;SingletonHolder.INSTANCE&nbsp;,&nbsp;not&nbsp;before.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_352_422_Open_Image" onclick="this.style.display='none'; Codehighlighter1_352_422_Open_Text.style.display='none'; Codehighlighter1_352_422_Closed_Image.style.display='inline'; Codehighlighter1_352_422_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_352_422_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_352_422_Closed_Text.style.display='none'; Codehighlighter1_352_422_Open_Image.style.display='inline'; Codehighlighter1_352_422_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SingletonHolder&nbsp;</span><span id="Codehighlighter1_352_422_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_352_422_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;INSTANCE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img id="Codehighlighter1_467_510_Open_Image" onclick="this.style.display='none'; Codehighlighter1_467_510_Open_Text.style.display='none'; Codehighlighter1_467_510_Closed_Image.style.display='inline'; Codehighlighter1_467_510_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_467_510_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_467_510_Closed_Text.style.display='none'; Codehighlighter1_467_510_Open_Image.style.display='inline'; Codehighlighter1_467_510_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()&nbsp;</span><span id="Codehighlighter1_467_510_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_467_510_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;SingletonHolder.INSTANCE;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<span class="mw-headline">Traditional simple way</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_23_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_209_Open_Text.style.display='none'; Codehighlighter1_23_209_Closed_Image.style.display='inline'; Codehighlighter1_23_209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_209_Closed_Text.style.display='none'; Codehighlighter1_23_209_Open_Image.style.display='inline'; Codehighlighter1_23_209_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton&nbsp;</span><span id="Codehighlighter1_23_209_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_23_209_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;INSTANCE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Protected&nbsp;constructor&nbsp;is&nbsp;sufficient&nbsp;to&nbsp;suppress&nbsp;unauthorized&nbsp;calls&nbsp;to&nbsp;the&nbsp;constructor</span><span style="color: #008000"><br />
<img id="Codehighlighter1_205_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_206_Open_Text.style.display='none'; Codehighlighter1_205_206_Closed_Image.style.display='inline'; Codehighlighter1_205_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_205_206_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_205_206_Closed_Text.style.display='none'; Codehighlighter1_205_206_Open_Image.style.display='inline'; Codehighlighter1_205_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Singleton()&nbsp;</span><span id="Codehighlighter1_205_206_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_205_206_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<span class="mw-headline">Java 5 solution</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_23_431_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_431_Open_Text.style.display='none'; Codehighlighter1_23_431_Closed_Image.style.display='inline'; Codehighlighter1_23_431_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_431_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_431_Closed_Text.style.display='none'; Codehighlighter1_23_431_Open_Image.style.display='inline'; Codehighlighter1_23_431_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton&nbsp;</span><span id="Codehighlighter1_23_431_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_23_431_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">volatile</span><span style="color: #000000">&nbsp;Singleton&nbsp;INSTANCE;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Protected&nbsp;constructor&nbsp;is&nbsp;sufficient&nbsp;to&nbsp;suppress&nbsp;unauthorized&nbsp;calls&nbsp;to&nbsp;the&nbsp;constructor</span><span style="color: #008000"><br />
<img id="Codehighlighter1_191_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_192_Open_Text.style.display='none'; Codehighlighter1_191_192_Closed_Image.style.display='inline'; Codehighlighter1_191_192_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_191_192_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_191_192_Closed_Text.style.display='none'; Codehighlighter1_191_192_Open_Image.style.display='inline'; Codehighlighter1_191_192_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Singleton()&nbsp;</span><span id="Codehighlighter1_191_192_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_191_192_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img id="Codehighlighter1_237_429_Open_Image" onclick="this.style.display='none'; Codehighlighter1_237_429_Open_Text.style.display='none'; Codehighlighter1_237_429_Closed_Image.style.display='inline'; Codehighlighter1_237_429_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_237_429_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_237_429_Closed_Text.style.display='none'; Codehighlighter1_237_429_Open_Image.style.display='inline'; Codehighlighter1_237_429_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()&nbsp;</span><span id="Codehighlighter1_237_429_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_237_429_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_267_401_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_401_Open_Text.style.display='none'; Codehighlighter1_267_401_Closed_Image.style.display='inline'; Codehighlighter1_267_401_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_267_401_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_267_401_Closed_Text.style.display='none'; Codehighlighter1_267_401_Open_Image.style.display='inline'; Codehighlighter1_267_401_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(INSTANCE&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_267_401_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_267_401_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_308_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_308_393_Open_Text.style.display='none'; Codehighlighter1_308_393_Closed_Image.style.display='inline'; Codehighlighter1_308_393_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_308_393_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_308_393_Closed_Text.style.display='none'; Codehighlighter1_308_393_Open_Image.style.display='inline'; Codehighlighter1_308_393_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(Singleton.</span><span style="color: #0000ff">class</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_308_393_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_308_393_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(INSTANCE&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSTANCE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;INSTANCE;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<a class="external text" title="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html" href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html" rel="nofollow">The "Double-Checked Locking is Broken" Declaration.</a><br />
<br />
<span class="mw-headline">The Enum-way</span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_22_38_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_38_Open_Text.style.display='none'; Codehighlighter1_22_38_Closed_Image.style.display='inline'; Codehighlighter1_22_38_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_22_38_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_38_Closed_Text.style.display='none'; Codehighlighter1_22_38_Open_Image.style.display='inline'; Codehighlighter1_22_38_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">enum</span><span style="color: #000000">&nbsp;Singleton&nbsp;</span><span id="Codehighlighter1_22_38_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_22_38_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;INSTANCE;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/shenkh/aggbug/237601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shenkh/" target="_blank">Java小鱼</a> 2008-10-30 14:16 <a href="http://www.blogjava.net/shenkh/articles/237601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>