﻿<?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-三文鱼</title><link>http://www.blogjava.net/shma1664/</link><description>志存高远 脚踏实地</description><language>zh-cn</language><lastBuildDate>Mon, 15 Jun 2026 15:56:23 GMT</lastBuildDate><pubDate>Mon, 15 Jun 2026 15:56:23 GMT</pubDate><ttl>60</ttl><item><title>int、char、double与byte相互转换</title><link>http://www.blogjava.net/shma1664/articles/376914.html</link><dc:creator>马少</dc:creator><author>马少</author><pubDate>Sat, 28 Apr 2012 00:48:00 GMT</pubDate><guid>http://www.blogjava.net/shma1664/articles/376914.html</guid><wfw:comment>http://www.blogjava.net/shma1664/comments/376914.html</wfw:comment><comments>http://www.blogjava.net/shma1664/articles/376914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shma1664/comments/commentRss/376914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shma1664/services/trackbacks/376914.html</trackback:ping><description><![CDATA[<p class="MsoNormal" align="center" style="text-align:center"><span lang="EN-US" style="font-size:15.0pt;mso-bidi-font-size:10.0pt;font-family:微软雅黑">int</span><span style="font-size:15.0pt;mso-bidi-font-size:10.0pt;font-family:微软雅黑">、<span lang="EN-US">char</span>、<span lang="EN-US">double</span>与<span lang="EN-US">byte</span>相互转换</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">整数到字节数组的转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static byte[]
intToByte(int number) {<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; int
temp = number;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; byte[]
b=new byte[4];<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; for
(int i=b.length-1;i&gt;-1;i</span><span style="font-family:宋体">&#8211;<span lang="EN-US">){<o:p></o:p></span></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]
= new Integer(temp&amp;0xff).byteValue(); <span style="color:green">//</span></span><span style="font-family:宋体;color:green">将最高位保存在最低位</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp
= temp &gt;&gt; 8; <span style="color:green">//</span></span><span style="font-family:宋体;color:green">向右移<span lang="EN-US">8</span>位<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">&nbsp;}<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">&nbsp;return b;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">字节数组到整数的转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static int
byteToInt(byte[] b) {<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; int s
= 0;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; for
(int i = 0; i &lt; 3; i++) {<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">if (b[i] &gt;= 0){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s
= s + b[i];<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">}else {<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s
= s + 256 + b[i];<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:42.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">s = s * 256;<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; if
(b[3] &gt;= 0) { <span style="color:green">//</span></span><span style="font-family:宋体;color:green">最后一个之所以不乘，是因为可能会溢出<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">s = s + b[3];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">} else {<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s
= s + 256 + b[3];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; return
s;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">字符到字节转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static byte[]
charToByte(char ch){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; int
temp=(int)ch;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; byte[]
b=new byte[2];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">for (int i=b.length-1;i&gt;-1;i</span><span style="font-family:宋体">&#8211;<span lang="EN-US">){<o:p></o:p></span></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i]
= new Integer(temp&amp;0xff).byteValue(); <span style="color:green">//</span></span><span style="font-family:宋体;color:green">将最高位保存在最低位<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp
= temp &gt;&gt; 8; <span style="color:green">//</span></span><span style="font-family:宋体;color:green">向右移<span lang="EN-US">8</span>位<span lang="EN-US"><o:p></o:p></span></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; return
b;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">字节到字符转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static char
byteToChar(byte[] b){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; int
s=0;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp; if(b[0]&gt;0)
{<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s+=b[0];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">} else {<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s+=256+b[0];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">s*=256;<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">if(b[1]&gt;0) {<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">&nbsp;s+=b[1];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">} else {<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left:21.0pt;text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">&nbsp;s+=256+b[1];<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">char ch=(char)s;<o:p></o:p></span></p>

<p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US" style="font-family:宋体">return ch;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">浮点到字节转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static byte[]
doubleToByte(double d){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;byte[] b=new byte[8];<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;long l=Double.doubleToLongBits(d);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;for(int i=0;i&lt;b.length;i++){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;b[i]=new Long(l).byteValue();<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l=l&gt;&gt;8;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;return b;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体;color:green">//</span><span style="font-family:宋体;color:green">字节到浮点转换</span><span lang="EN-US" style="font-family:宋体"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">public static double
byteToDouble(byte[] b){<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;long l;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l=b[0];<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xff;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[1]&lt;&lt;8);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xffff;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[2]&lt;&lt;16);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xffffff;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[3]&lt;&lt;24);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xffffffffl;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[4]&lt;&lt;32);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xffffffffffl;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[5]&lt;&lt;40);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l&amp;=0xffffffffffffl;<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[6]&lt;&lt;48);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;</span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;l|=((long)b[7]&lt;&lt;56);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">&nbsp;return Double.longBitsToDouble(l);<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:宋体">}<o:p></o:p></span></p><font color="#4b4b4b" face="Georgia"><span style="font-size: 15px;"><br /></span></font><img src ="http://www.blogjava.net/shma1664/aggbug/376914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shma1664/" target="_blank">马少</a> 2012-04-28 08:48 <a href="http://www.blogjava.net/shma1664/articles/376914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Book01-No.1 单例多线程执行模式</title><link>http://www.blogjava.net/shma1664/articles/376912.html</link><dc:creator>马少</dc:creator><author>马少</author><pubDate>Sat, 28 Apr 2012 00:20:00 GMT</pubDate><guid>http://www.blogjava.net/shma1664/articles/376912.html</guid><wfw:comment>http://www.blogjava.net/shma1664/comments/376912.html</wfw:comment><comments>http://www.blogjava.net/shma1664/articles/376912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shma1664/comments/commentRss/376912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shma1664/services/trackbacks/376912.html</trackback:ping><description><![CDATA[<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><strong><span style="font-size: medium; "><span style="font-size: small; ">1、多线程死锁</span></span></strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: small; "><br /></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; ">a. 死锁分析：</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; ">&nbsp; &nbsp;假设A和B同时在吃意大利面，而吃意大利面的条件是左手使用汤勺，右手使用叉子。现在只有一副餐具，A拿到了汤勺，B拿到了叉子，A等待B放下叉子，B等待A放下汤勺。则形成了死锁。</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; ">b. 出现死锁的条件：</span></span></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">具有多个SharedResource参与者，相当于汤勺和叉子。</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">线程锁定了一个SharedResource之后，在未解锁的情况下去锁定另一个SharedResource参与者，相当于A在拥有了汤勺之后，又去拿叉子；B在拥有了叉子之后又去拿汤勺。</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">获取SharedResource参与者的顺序不固定，参与者顺序对等，相当于汤勺和叉子的顺序相同，没有先后关系。</span></span></li></ul><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; ">c. 上述1、2、3三个条件只要破坏了其中一种，则就解决了死锁的问题。</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><strong>2、提高多线程执行性能的两种方式：</strong></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><span style="white-space: pre; ">	</span>减少 SharedResource参与者参与者的个数，从而减少synchronized使用数量，减少获取对象锁的操作时间</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; ">尽量缩短临界区范围，从而减少线程冲突时等待的时间。</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><br /></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; text-align: left; background-color: #ffffff; "><span style="font-size: medium; "><span style="font-size: small; "><strong>3、自己设计线程锁<br /></strong></span></span><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 />-->oid&nbsp;method()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;lock();&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">锁</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />..<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">finally</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unlock();&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">最后无论什么情况都要解锁</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><span style="font-size: medium; "><span style="font-size: small; "><strong><br /></strong></span></span><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; "><strong>4、原子操作</strong></span></span></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">用synchronized定义的方法或者块都具有原子性，只能被一个线程使用</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">long、double为非原子性，其他类型以及对象等引用都是具有原子性</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">在定义long、double类型变量时，使用volatile修饰，表示对这个字段变量的定义为不可分隔的</span></span></li></ul><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; "><strong>总结：</strong></span></span></p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">基本类型、引用类型为原子操作</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">long、double为可以分割的</span></span></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: medium; "><span style="font-size: small; ">在多线程中使用其作为共享参与者使用时，要么在使用时的方法用synchronized定义，或者使用volatile声明</span></span></li></ul><div><span style="font-size: x-small; "><strong>5、意大利面死锁问题解决方案</strong></span></div><div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: small; "><span style="white-space: pre; ">	</span>设计思路是将汤勺和叉子作为一个整体去处理，这样就解决了死锁的问题。<br /></span><span style="font-size: small; "><span style="white-space: pre; ">	</span>还有一种方法就是在添加汤勺和叉子时是有序的，必须先拿汤勺，再拿叉子，这样也可以解决死锁问题。</span></p></div><span style="font-size: medium; "><span style="font-size: small; "><strong><br /></strong></span></span><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">主方法，用于创建处理</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Main&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tool&nbsp;spoon&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Tool("spoon");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tool&nbsp;fork&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Tool("fork");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tools&nbsp;tools&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Tools(spoon,&nbsp;fork);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;EaterThread(tools,&nbsp;"shma").start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;EaterThread(tools,&nbsp;"jjq").start();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><div style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; 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: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;吃意大利面的线程&nbsp;不断的吃</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">class</span>&nbsp;EaterThread&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;Thread&nbsp;{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;name;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Tool&nbsp;leftHand;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Tool&nbsp;rightHand;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;EaterThread(Tools&nbsp;tools,&nbsp;String&nbsp;name)&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>();<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.leftHand&nbsp;=&nbsp;tools.getSpoon();<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.name&nbsp;=&nbsp;name;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.rightHand&nbsp;=&nbsp;tools.getFork();<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;eat()&nbsp;{<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">synchronized</span>(leftHand)&nbsp;{<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;"&nbsp;takes&nbsp;up&nbsp;"&nbsp;+&nbsp;leftHand&nbsp;+&nbsp;"(left)");<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">synchronized</span>(rightHand)&nbsp;{<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;"&nbsp;takes&nbsp;up&nbsp;"&nbsp;+&nbsp;rightHand&nbsp;+&nbsp;"(right)");<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;"&nbsp;is&nbsp;eating&nbsp;now!");<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;"&nbsp;puts&nbsp;down&nbsp;"&nbsp;+&nbsp;rightHand&nbsp;+&nbsp;"(right)");<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;"&nbsp;puts&nbsp;down&nbsp;"&nbsp;+&nbsp;leftHand&nbsp;+&nbsp;"(left)");<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">23</span>&nbsp;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;run()&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(<span style="color: #0000FF; ">true</span>)&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eat();<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1000);<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;}<br /></div></div></p><img src ="http://www.blogjava.net/shma1664/aggbug/376912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shma1664/" target="_blank">马少</a> 2012-04-28 08:20 <a href="http://www.blogjava.net/shma1664/articles/376912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>