﻿<?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-&lt;font size=4&gt;天快黑了的日志&lt;/font&gt;-随笔分类-Exception</title><link>http://www.blogjava.net/zhvfeng/category/45775.html</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;分享知识、分享快乐&lt;/i&gt;</description><language>zh-cn</language><lastBuildDate>Thu, 05 Aug 2010 02:42:39 GMT</lastBuildDate><pubDate>Thu, 05 Aug 2010 02:42:39 GMT</pubDate><ttl>60</ttl><item><title>谁能帮忙解释一下为什么这个程序会死锁？</title><link>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html</link><dc:creator>天快黑了</dc:creator><author>天快黑了</author><pubDate>Wed, 04 Aug 2010 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html</guid><wfw:comment>http://www.blogjava.net/zhvfeng/comments/327956.html</wfw:comment><comments>http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/zhvfeng/comments/commentRss/327956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhvfeng/services/trackbacks/327956.html</trackback:ping><description><![CDATA[<p>&#160;大家不用关心程序实际逻辑是否正确，只是好奇，为什么这个程序会hang住不运行了？而且CPU会占用100%</p>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&#160;java.util.HashMap;<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&#160;TestLock&#160;{<br />
<br />
</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&#160;HashMap&#160;map&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;HashMap();<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;TestLock()&#160;{<br />
Thread&#160;t1&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread()&#160;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;run()&#160;{<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">50000</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&#160;{<br />
map.put(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Integer(i),&#160;i);<br />
}<br />
System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">t1&#160;over</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
};<br />
<br />
Thread&#160;t2&#160;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Thread()&#160;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;run()&#160;{<br />
</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&#160;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">50000</span><span style="color: #000000; ">;&#160;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&#160;{<br />
map.put(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;Integer(i),&#160;i);<br />
}<br />
<br />
System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">t2&#160;over</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
};<br />
<br />
<br />
t1.start();<br />
t2.start();<br />
<br />
}<br />
<br />
<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&#160;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&#160;main(String[]&#160;args)&#160;{&#160;&#160;&#160;&#160;<br />
</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&#160;TestLock();<br />
}<br />
}<br />
</span></div>
<br />
<br />
Dump thread会看到，程序hang到：<br />
<br />
<p><font style="background-color: #c0c0c0">"Thread-1" prio=6 tid=0x00c70bd8 nid=0x914 runnable [0x02ebf000..0x02ebfc68]<br />
at java.util.HashMap.put(HashMap.java:420)<br />
at TestLock$2.run(TestLock.java:20)</font></p>
<p><font style="background-color: #c0c0c0">"Thread-0" prio=6 tid=0x00c70a50 nid=0x578 runnable [0x02e7f000..0x02e7fb68]<br />
at java.util.HashMap.put(HashMap.java:420)<br />
at TestLock$1.run(TestLock.java:11)<br />
</font></p>
<img src ="http://www.blogjava.net/zhvfeng/aggbug/327956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhvfeng/" target="_blank">天快黑了</a> 2010-08-04 17:40 <a href="http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>另类NoClassDefFoundError</title><link>http://www.blogjava.net/zhvfeng/archive/2010/07/29/327446.html</link><dc:creator>天快黑了</dc:creator><author>天快黑了</author><pubDate>Thu, 29 Jul 2010 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhvfeng/archive/2010/07/29/327446.html</guid><wfw:comment>http://www.blogjava.net/zhvfeng/comments/327446.html</wfw:comment><comments>http://www.blogjava.net/zhvfeng/archive/2010/07/29/327446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhvfeng/comments/commentRss/327446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhvfeng/services/trackbacks/327446.html</trackback:ping><description><![CDATA[通常NoClassDefFoundError产生的原因都是由于用到的class在CLASSPATH中找不到。<br />
<br />
还有下面一种另类的NoClassDefFoundError：<br />
1. Class A 调用 Class B<br />
2. JVM尝试加载Class B，并执行Class B的静态块<br />
3. Class B的静态块内抛出RuntimeException，从而导致JVM加载Class B失败<br />
4. 之后，任何类只要调用Class B，就会出现NoClassDefFoundError<br />
<br />
大家可以运行下面的例子试一下:<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"><span style="color: #008080">1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;B&nbsp;<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;{<br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.substring(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
</span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000">}</span></div>
<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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;A&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;B();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Throwable&nbsp;e)<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;B();&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Throwable&nbsp;e)<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">}</span></div>
  <img src ="http://www.blogjava.net/zhvfeng/aggbug/327446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhvfeng/" target="_blank">天快黑了</a> 2010-07-29 15:54 <a href="http://www.blogjava.net/zhvfeng/archive/2010/07/29/327446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>