﻿<?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-Mison(迈胜)</title><link>http://www.blogjava.net/mison/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 25 Apr 2026 04:05:03 GMT</lastBuildDate><pubDate>Sat, 25 Apr 2026 04:05:03 GMT</pubDate><ttl>60</ttl><item><title>2010年的技术架构建议</title><link>http://www.blogjava.net/mison/archive/2010/03/03/314350.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Wed, 03 Mar 2010 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/03/03/314350.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/314350.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/03/03/314350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/314350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/314350.html</trackback:ping><description><![CDATA[<strong>编程语言<br />
</strong>首先要能跳出语言之争及语言偏见，架构师需要在中立的角度选择最合适团队的语言，避免在技术决策中加入过多个人喜好。在系统语言层面，主要可关注以下几种<br />
Erlang, 会继续在小圈子内流行，业界应用Erlang技术最大的障碍不是Erlang技术本身，而在于缺乏这方面专业人才。<br />
Scala, 和Erlang不同，Scala有成熟JVM及丰富的周边library，在异构系统中集成也很容易，新项目使用Scala风险很小，所以Scala在新语言中应该有较大的提升优势。<br />
Go, 由于刚开始推出，不适合正式项目使用，2010年会稳步上升，可适当关注。<br />
其他语言基本保持现状。<a href="http://bbs.misonsoft.com/" target="_blank">java论坛</a><br />
<br />
<strong>架构</strong><br />
LAMP中的<span class="t_tag" href="tag.php?name=Linux" onxxxxx="tagshow(event)">Linux</span>, <span class="t_tag" href="tag.php?name=Apache" onxxxxx="tagshow(event)">Apache</span>, <span class="t_tag" href="tag.php?name=MySQL" onxxxxx="tagshow(event)">MySQL</span>会受到云计算中的App Engine模式的冲击，因为App Engine在分布式处理，可扩展性，稳定性方面都有很大的优势。 在App Engine模式中，MySQL作用会降低，退化成一种存储服务。而且App Engine的存储服务含义会更广泛，传统架构中的MySQL, Memcached, 及key value store在App Engine框架下都会以底层的服务方式提供。存储不再是软件，而是一种可靠服务，因此也会带来分布式存储相关技术的繁荣。<br />
<br />
Web 2.0的设计中，Cache会成为一个中心元素。传统的web应用cache只是一个可选的锦上添花层，即使去掉，PHP + MySQL这种模式也可正常运行。但随着未来应用social化及realtime的趋势，从facebook及twitter的设计来看，cache已经从可选层成为核心层。cache设计的好坏直接决定架构的成败。<br />
<br />
由于web发展的趋势会使应用更realtime化，体现到技术层面是HTML5(websockets)及类似技术具有更高的价值。但由于阻碍生产力的IE存在，HTML5无法一步到位。建议关注能解决HTML5及旧<span class="t_tag" href="tag.php?name=ajax" onxxxxx="tagshow(event)">ajax</span>自适应的框架。<br />
<br />
网络模型方面，由于多核的硬件环境，轻量级的进程模型值得采用。如传统的C++ boost的asio, 各公司自己实现的coroutine, Erlang的process, go的goroutines, <span class="t_tag" href="tag.php?name=Java" onxxxxx="tagshow(event)">Java</span>/Scala的<span class="t_tag" href="tag.php?name=Netty" onxxxxx="tagshow(event)">Netty</span>/Mina框架等。但C++框架的代码优雅性可维护性欠佳，性能也没有突出的优势，可关注后面几种方案。<br />
<br />
分布式方面，Dynamo及Chubby的思想会逐渐在国内的项目等到更广泛的应用，架构师会逐步丢弃双写，双机心跳等山寨式的容错设计思想，可靠的分布式设计思想会更普及。<br />
<br />
<strong>存储</strong><br />
2009是key value/nosql产品百花齐放的年代。到2010年，它们之中优秀的会脱颖而出逐步主流化，主流化的产品周边的工具会更丰富，运维相关经验也会更成熟。目前阻碍很多key value产品推广很大一个障碍是运维的顾虑，而不是它们本身的性能。究竟会是Memcachedb/Tokyo Cabinet/Redis这样的小巧软件走向主流，还是Cassandra这样的巨无霸更受欢迎，我们拭目以待。
<img src ="http://www.blogjava.net/mison/aggbug/314350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-03-03 09:33 <a href="http://www.blogjava.net/mison/archive/2010/03/03/314350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Black设计模式】观察者模式代码解析</title><link>http://www.blogjava.net/mison/archive/2010/03/02/314245.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Tue, 02 Mar 2010 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/03/02/314245.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/314245.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/03/02/314245.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/314245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/314245.html</trackback:ping><description><![CDATA[<br />
备忘下地址，Black设计模式解析的还不错。<a href="http://hi.baidu.com/misoner/blog/item/2334e388d8defd749e2fb429.html">http://hi.baidu.com/misoner/blog/item/2334e388d8defd749e2fb429.html</a>
<img src ="http://www.blogjava.net/mison/aggbug/314245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-03-02 10:18 <a href="http://www.blogjava.net/mison/archive/2010/03/02/314245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Maven2.2.1下载</title><link>http://www.blogjava.net/mison/archive/2010/02/26/313965.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Fri, 26 Feb 2010 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/02/26/313965.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/313965.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/02/26/313965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/313965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/313965.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>下载地址：<a href="http://bbs.misonsoft.com/thread-1005-1-1.html">http://bbs.misonsoft.com/thread-1005-1-1.html</a></p>
<p>&nbsp;</p>
<p><a href="http://bbs.misonsoft.com/" target="_blank">java论坛</a></p>
</div>
<img src ="http://www.blogjava.net/mison/aggbug/313965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-02-26 09:23 <a href="http://www.blogjava.net/mison/archive/2010/02/26/313965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新鲜出炉的10年福富笔试</title><link>http://www.blogjava.net/mison/archive/2010/02/24/313789.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Wed, 24 Feb 2010 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/02/24/313789.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/313789.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/02/24/313789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/313789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/313789.html</trackback:ping><description><![CDATA[下载地址：<a href="http://bbs.misonsoft.com/thread-1755-1-1.html">http://bbs.misonsoft.com/thread-1755-1-1.html</a>
<img src ="http://www.blogjava.net/mison/aggbug/313789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-02-24 14:13 <a href="http://www.blogjava.net/mison/archive/2010/02/24/313789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建线程两种方式的比较</title><link>http://www.blogjava.net/mison/archive/2010/02/23/313677.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Tue, 23 Feb 2010 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/02/23/313677.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/313677.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/02/23/313677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/313677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/313677.html</trackback:ping><description><![CDATA[装载：Mison（迈胜）<a href="http://bbs.misonsoft.com/thread-1225-1-2.html">http://bbs.misonsoft.com/thread-1225-1-2.html</a><br />
<br />
通过铁路售票程序来理解实现多线程的两种方法：通过java.lang.Thread类和通过Runnable接口<br />
　　java中有两种实现多线程的方式。一是直接继承Thread类，二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢?<br />
　　为了回答这个问题，我们可以通过编写一段代码来进行分析。我们用代码来模拟铁路售票系统，实现通过四个售票点发售某日某次列车的100张车票，一个售票点用一个线程表示。<br />
　　我们首先这样编写这个程序：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_25_170_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_170_Open_Text.style.display='none'; Codehighlighter1_25_170_Closed_Image.style.display='inline'; Codehighlighter1_25_170_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_25_170_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_25_170_Closed_Text.style.display='none'; Codehighlighter1_25_170_Open_Image.style.display='inline'; Codehighlighter1_25_170_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #000000">　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadDome1</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_25_170_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_25_170_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_68_165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_165_Open_Text.style.display='none'; Codehighlighter1_68_165_Closed_Image.style.display='inline'; Codehighlighter1_68_165_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_68_165_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_68_165_Closed_Text.style.display='none'; Codehighlighter1_68_165_Open_Image.style.display='inline'; Codehighlighter1_68_165_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_68_165_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_68_165_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　ThreadTest&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　t.start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　t.start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　t.start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　t.start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_206_424_Open_Image" onclick="this.style.display='none'; Codehighlighter1_206_424_Open_Text.style.display='none'; Codehighlighter1_206_424_Closed_Image.style.display='inline'; Codehighlighter1_206_424_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_206_424_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_206_424_Closed_Text.style.display='none'; Codehighlighter1_206_424_Open_Image.style.display='inline'; Codehighlighter1_206_424_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" />　　</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Thread</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_206_424_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_206_424_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ticket&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_257_419_Open_Image" onclick="this.style.display='none'; Codehighlighter1_257_419_Open_Text.style.display='none'; Codehighlighter1_257_419_Closed_Image.style.display='inline'; Codehighlighter1_257_419_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_257_419_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_257_419_Closed_Text.style.display='none'; Codehighlighter1_257_419_Open_Image.style.display='inline'; Codehighlighter1_257_419_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_257_419_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_257_419_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_273_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_273_414_Open_Text.style.display='none'; Codehighlighter1_273_414_Closed_Image.style.display='inline'; Codehighlighter1_273_414_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_273_414_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_273_414_Closed_Text.style.display='none'; Codehighlighter1_273_414_Open_Image.style.display='inline'; Codehighlighter1_273_414_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_273_414_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_273_414_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_292_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_389_Open_Text.style.display='none'; Codehighlighter1_292_389_Closed_Image.style.display='inline'; Codehighlighter1_292_389_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_292_389_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_292_389_Closed_Text.style.display='none'; Codehighlighter1_292_389_Open_Image.style.display='inline'; Codehighlighter1_292_389_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">if</span><span style="color: #000000">(ticket&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_292_389_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_292_389_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #000000">"</span><span style="color: #000000">is&nbsp;saling&nbsp;ticket</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ticket</span><span style="color: #000000">--</span><span style="color: #000000">);&nbsp;<br />
<img id="Codehighlighter1_394_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_394_409_Open_Text.style.display='none'; Codehighlighter1_394_409_Closed_Image.style.display='inline'; Codehighlighter1_394_409_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_394_409_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_394_409_Closed_Text.style.display='none'; Codehighlighter1_394_409_Open_Image.style.display='inline'; Codehighlighter1_394_409_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　}</span></span><span style="color: #0000ff">else</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_394_409_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_394_409_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span></div>
上面的代码中，我们用ThreadTest类模拟售票处的售票过程，run方法中的每一次循环都将总票数减1，模拟卖出一张车票，同时该车票号打印出来，直接剩余的票数到零为止。在ThreadDemo1类的main方法中，我们创建了一个线程对象，并重复启动四次，希望通过这种方式产生四个线程。从运行的结果来看我们发现其实只有一个线程在运行，这个结果告诉我们：一个线程对象只能启动一个线程，无论你调用多少遍start()方法，结果只有一个线程。<br />
　　我们接着修改ThreadDemo1，在main方法中创建四个Thread对象： <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_25_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_194_Open_Text.style.display='none'; Codehighlighter1_25_194_Closed_Image.style.display='inline'; Codehighlighter1_25_194_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_25_194_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_25_194_Closed_Text.style.display='none'; Codehighlighter1_25_194_Open_Image.style.display='inline'; Codehighlighter1_25_194_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #000000">　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadDemo1</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_25_194_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_25_194_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_68_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_189_Open_Text.style.display='none'; Codehighlighter1_68_189_Closed_Image.style.display='inline'; Codehighlighter1_68_189_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_68_189_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_68_189_Closed_Text.style.display='none'; Codehighlighter1_68_189_Open_Image.style.display='inline'; Codehighlighter1_68_189_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_68_189_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_68_189_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest().start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest().start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest().start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest().start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_230_449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_230_449_Open_Text.style.display='none'; Codehighlighter1_230_449_Closed_Image.style.display='inline'; Codehighlighter1_230_449_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_230_449_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_230_449_Closed_Text.style.display='none'; Codehighlighter1_230_449_Open_Image.style.display='inline'; Codehighlighter1_230_449_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" />　　</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Thread</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_230_449_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_230_449_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ticket&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_281_444_Open_Image" onclick="this.style.display='none'; Codehighlighter1_281_444_Open_Text.style.display='none'; Codehighlighter1_281_444_Closed_Image.style.display='inline'; Codehighlighter1_281_444_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_281_444_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_281_444_Closed_Text.style.display='none'; Codehighlighter1_281_444_Open_Image.style.display='inline'; Codehighlighter1_281_444_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_281_444_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_281_444_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_297_439_Open_Image" onclick="this.style.display='none'; Codehighlighter1_297_439_Open_Text.style.display='none'; Codehighlighter1_297_439_Closed_Image.style.display='inline'; Codehighlighter1_297_439_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_297_439_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_297_439_Closed_Text.style.display='none'; Codehighlighter1_297_439_Open_Image.style.display='inline'; Codehighlighter1_297_439_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_297_439_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_297_439_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_316_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_316_414_Open_Text.style.display='none'; Codehighlighter1_316_414_Closed_Image.style.display='inline'; Codehighlighter1_316_414_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_316_414_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_316_414_Closed_Text.style.display='none'; Codehighlighter1_316_414_Open_Image.style.display='inline'; Codehighlighter1_316_414_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">if</span><span style="color: #000000">(ticket&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_316_414_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_316_414_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;is&nbsp;saling&nbsp;ticket</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;ticket</span><span style="color: #000000">--</span><span style="color: #000000">);&nbsp;<br />
<img id="Codehighlighter1_419_434_Open_Image" onclick="this.style.display='none'; Codehighlighter1_419_434_Open_Text.style.display='none'; Codehighlighter1_419_434_Closed_Image.style.display='inline'; Codehighlighter1_419_434_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_419_434_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_419_434_Closed_Text.style.display='none'; Codehighlighter1_419_434_Open_Image.style.display='inline'; Codehighlighter1_419_434_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　}</span></span><span style="color: #0000ff">else</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_419_434_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_419_434_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">break</span><span style="color: #000000">;&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span></div>
<br />
这下达到目的了吗?<br />
　　从结果上看每个票号都被打印了四次，即四个线程各自卖各自的100张票，而不去卖共同的100张票。这种情况是怎么造成的呢?我们需要的是，多个线程去处理同一个资源，一个资源只能对应一个对象，在上面的程序中，我们创建了四个ThreadTest对象，就等于创建了四个资源，每个资源都有100张票，每个线程都在独自处理各自的资源。<br />
　　经过这些实验和分析，可以总结出，要实现这个铁路售票程序，我们只能创建一个资源对象，但要创建多个线程去处理同一个资源对象，并且每个线程上所运行的是相同的程序代码。在回顾一下使用接口编写多线程的过程。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img id="Codehighlighter1_25_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_25_218_Open_Text.style.display='none'; Codehighlighter1_25_218_Closed_Image.style.display='inline'; Codehighlighter1_25_218_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_25_218_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_25_218_Closed_Text.style.display='none'; Codehighlighter1_25_218_Open_Image.style.display='inline'; Codehighlighter1_25_218_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" /><span style="color: #000000">　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadDemo1</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_25_218_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_25_218_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_68_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_213_Open_Text.style.display='none'; Codehighlighter1_68_213_Closed_Image.style.display='inline'; Codehighlighter1_68_213_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_68_213_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_68_213_Closed_Text.style.display='none'; Codehighlighter1_68_213_Open_Image.style.display='inline'; Codehighlighter1_68_213_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_68_213_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_68_213_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　ThreadTest&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(t).start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(t).start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(t).start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Thread(t).start();&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_259_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_259_462_Open_Text.style.display='none'; Codehighlighter1_259_462_Closed_Image.style.display='inline'; Codehighlighter1_259_462_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_259_462_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_259_462_Closed_Text.style.display='none'; Codehighlighter1_259_462_Open_Image.style.display='inline'; Codehighlighter1_259_462_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" />　　</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Runnable</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_259_462_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_259_462_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;tickets&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;&nbsp;<br />
<img id="Codehighlighter1_311_457_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_457_Open_Text.style.display='none'; Codehighlighter1_311_457_Closed_Image.style.display='inline'; Codehighlighter1_311_457_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_311_457_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_311_457_Closed_Text.style.display='none'; Codehighlighter1_311_457_Open_Image.style.display='inline'; Codehighlighter1_311_457_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_311_457_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_311_457_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_327_452_Open_Image" onclick="this.style.display='none'; Codehighlighter1_327_452_Open_Text.style.display='none'; Codehighlighter1_327_452_Closed_Image.style.display='inline'; Codehighlighter1_327_452_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_327_452_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_327_452_Closed_Text.style.display='none'; Codehighlighter1_327_452_Open_Image.style.display='inline'; Codehighlighter1_327_452_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_327_452_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_327_452_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img id="Codehighlighter1_347_447_Open_Image" onclick="this.style.display='none'; Codehighlighter1_347_447_Open_Text.style.display='none'; Codehighlighter1_347_447_Closed_Image.style.display='inline'; Codehighlighter1_347_447_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_347_447_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_347_447_Closed_Text.style.display='none'; Codehighlighter1_347_447_Open_Image.style.display='inline'; Codehighlighter1_347_447_Open_Text.style.display='inline';" alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" />　　</span><span style="color: #0000ff">if</span><span style="color: #000000">(tickets&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_347_447_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_347_447_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　System.out.println(Thread.currentThread().getName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />　　</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;is&nbsp;saling&nbsp;ticket&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;tickets</span><span style="color: #000000">--</span><span style="color: #000000">);&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />　　}</span></span><span style="color: #000000">&nbsp;<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />　　}</span></span></div>
<br />
上面的程序中，创建了四个线程，每个线程调用的是同一个ThreadTest对象中的run()方法，访问的是同一个对象中的变量(tickets)的实例，这个程序满足了我们的需求。在Windows上可以启动多个记事本程序一样，也就是多个进程使用同一个记事本程序代码。<br />
　　可见，实现Runnable接口相对于继承Thread类来说，有如下显著的好处：<br />
　　(1)适合多个相同程序代码的线程去处理同一资源的情况，把虚拟CPU(线程)同程序的代码，数据有效的分离，较好地体现了面向对象的设计思想。<br />
　　(2)可以避免由于<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Java">Java</span>的单继承特性带来的局限。我们经常碰到这样一种情况，即当我们要将已经继承了某一个类的子类放入多线程中，由于一个类不能同时有两个父类，所以不能用继承Thread类的方式，那么，这个类就只能采用实现Runnable接口的方式了。<br />
　　(3)有利于程序的健壮性，代码能够被多个线程共享，代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时，即称它们共享相同的代码。多个线程操作相同的数据，与它们的代码无关。当共享访问相同的对象时，即它们共享相同的数据。当线程被构造时，需要的代码和数据通过一个对象作为构造函数实参传递进去，这个对象就是一个实现了Runnable接口的类的实例。 
<img src ="http://www.blogjava.net/mison/aggbug/313677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-02-23 09:19 <a href="http://www.blogjava.net/mison/archive/2010/02/23/313677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SCWCD认证之路</title><link>http://www.blogjava.net/mison/archive/2010/02/22/313645.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Mon, 22 Feb 2010 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/02/22/313645.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/313645.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/02/22/313645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/313645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/313645.html</trackback:ping><description><![CDATA[SCWCD（Sun Certified Web Component Developer）是SUN推出的一个认证，主要是考察开发者对网络组件开发的熟悉程度，如果想考取该认证必须先要取得<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=SCJP">SCJP</span>的认证。<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;考试的费用在中国大陆是1500RMB（不知道价格是否有变），考试的内容主要有：<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;1）The Servlet Technology Model<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2）The Structure and Deployment of Web Application<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;3）The Web Container Model<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;4）Session Management<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;5）Web Application Security<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;6）The <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Java">Java</span>Server Pages（JSP） Technoloty Model<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;7）Buliding JSP Pages Using the Expression Language（EL）<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;8）Building JSP Pages Using Standard Actions<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;9）Building JSP Pages Using Tag Libraries<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;10）Building a Custom Tag Library<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;11）Java EE Patterns<br />
<br />
学习资料：<br />
<a href="http://bbs.misonsoft.com/forum-19-1.html ">http://bbs.misonsoft.com/forum-19-1.html </a>
<img src ="http://www.blogjava.net/mison/aggbug/313645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-02-22 16:51 <a href="http://www.blogjava.net/mison/archive/2010/02/22/313645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse卡机问题的解决</title><link>http://www.blogjava.net/mison/archive/2010/02/22/313578.html</link><dc:creator>Mison</dc:creator><author>Mison</author><pubDate>Mon, 22 Feb 2010 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/mison/archive/2010/02/22/313578.html</guid><wfw:comment>http://www.blogjava.net/mison/comments/313578.html</wfw:comment><comments>http://www.blogjava.net/mison/archive/2010/02/22/313578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mison/comments/commentRss/313578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mison/services/trackbacks/313578.html</trackback:ping><description><![CDATA[在用[MyEclipse] 写代码很容易卡死机，尤其是在对JSP文件的&lt;%%&gt;之间写代码的时候，只要一弹出智能提示就立刻卡死，程序失去响应，我以为是MyEclipse版本的问题，结果换了6.0版-》6.5版-》7.0版全都一样，难道是我机子的问题？可是还原系统后用还是一样的结果。<br />
<br />
<br />
在网上找了很久才知道，是MyEclipse在智能提示的时候自动访问网络上sun公司的最新API文档，只要关闭掉网络连接就可以了。我试了试断开网络然后在用MyEclipse写代码，结果还真的搞定了。可是，我总不能因为个这就不上网了吧，终于，找到了两全其美的解决方法。<br />
<br />
在自己创建的工程名上右键，选择Properties》在打开的窗口中点击<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Java">Java</span> Build Path》单击Libraries选项卡，找到<br />
<br />
JRE System Libraries-&gt;charsets.jar-&gt;Javadoc location<br />
<br />
选中Javadoc location，再选择右边的Remove,更改成Javadoc location: (None)，点击OK。<br />
接下来在写代码的时候就不会再卡死了。<br />
<br />
MyEclipse 6.5编写jsp代码时联想输入无响应解决方法&nbsp; &nbsp; <br />
很头疼的一个问题，在jsp页面输入&#8220;.&#8221;之后,MyEclipse往往会出现无响应,要等上好几分钟才能恢复正常,找了很多方法,下面这个方法是最有效的，其实很简单： <br />
<br />
<br />
Window--&gt;java--&gt;Installed JREs--&gt;选中你的版本--&gt;Edit--&gt;选中jar包--&gt;Javadoc Location 那里有个path<br />
把path下面的地址去掉就OK了！<br />
<br />
<br />
原因就是在引用javax.servelet.jar这个包中的javadoc location 位置设置的sun官方网站。这样每次提示的时候都要去sun官方网站去找doc所以导致MyEclipse会无响应，当禁用网卡或者拔掉网线的时候，就不会出现这种情况<a href="http://java.sun.com/j2se/1.5.0/docs/api/" target="_blank">http://java.sun.com/j2se/1.5.0/docs/api/</a><br />
<br />
装载：<a href="http://bbs.misonsoft.com/thread-920-1-2.html">http://bbs.misonsoft.com/thread-920-1-2.html</a><br />
<br />
<br />
<br />
<br />
总之把所有关于java.sun.com的东西都关掉就ok了应该是有5个 
<img src ="http://www.blogjava.net/mison/aggbug/313578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mison/" target="_blank">Mison</a> 2010-02-22 09:32 <a href="http://www.blogjava.net/mison/archive/2010/02/22/313578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>