﻿<?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-ken-xie</title><link>http://www.blogjava.net/ken-xie/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 04:45:43 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 04:45:43 GMT</pubDate><ttl>60</ttl><item><title>用 double null check 解决线程安全问题</title><link>http://www.blogjava.net/ken-xie/archive/2010/12/21/341245.html</link><dc:creator>阿忠</dc:creator><author>阿忠</author><pubDate>Tue, 21 Dec 2010 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/ken-xie/archive/2010/12/21/341245.html</guid><wfw:comment>http://www.blogjava.net/ken-xie/comments/341245.html</wfw:comment><comments>http://www.blogjava.net/ken-xie/archive/2010/12/21/341245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ken-xie/comments/commentRss/341245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ken-xie/services/trackbacks/341245.html</trackback:ping><description><![CDATA[在java中，解决多线程问题有很多中方式，double null check是一个比较有效的且能避免性能影响的一个好的方式。下面是一个简单的例子：
<div>
<div>public Keyed getReferencedObject()</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>if (referencedObject == null &amp;&amp; !isClassLevel())</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>return _getReferencedObject();</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>return referencedObject;</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>private synchronized Keyed _getReferencedObject()</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>if (referencedObject == null &amp;&amp; !isClassLevel())</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>try</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">				</span>referencedObject = getServerImpl().getObjectManager(</div>
<div><span class="Apple-tab-span" style="white-space:pre">					</span>getObjectType()).getObject(</div>
<div><span class="Apple-tab-span" style="white-space:pre">					</span>getObjectKey());</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>catch (DatasweepException e)</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">				</span>EventLog.logException(e,this,"getReferencedObject(" + getObjectTypeName() + ", " + getObjectKey() + ")");</div>
<div><span class="Apple-tab-span" style="white-space:pre">			</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>return referencedObject;</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>}</div>
<div><br />
</div>
</div>
<img src ="http://www.blogjava.net/ken-xie/aggbug/341245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ken-xie/" target="_blank">阿忠</a> 2010-12-21 15:21 <a href="http://www.blogjava.net/ken-xie/archive/2010/12/21/341245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>