﻿<?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-jake1036</title><link>http://www.blogjava.net/jake1036/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 17:55:57 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 17:55:57 GMT</pubDate><ttl>60</ttl><item><title>java日期控件</title><link>http://www.blogjava.net/jake1036/archive/2010/11/02/336801.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Tue, 02 Nov 2010 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/11/02/336801.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/336801.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/11/02/336801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/336801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/336801.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用java实现的日期，精确到分秒&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/11/02/336801.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/336801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-11-02 14:59 <a href="http://www.blogjava.net/jake1036/archive/2010/11/02/336801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java被隐藏的指针</title><link>http://www.blogjava.net/jake1036/archive/2010/09/07/331345.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Tue, 07 Sep 2010 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/09/07/331345.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/331345.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/09/07/331345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/331345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/331345.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java中的指针思想&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/09/07/331345.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/331345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-09-07 21:21 <a href="http://www.blogjava.net/jake1036/archive/2010/09/07/331345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java socket非阻塞I/O</title><link>http://www.blogjava.net/jake1036/archive/2010/08/01/327703.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Sun, 01 Aug 2010 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/08/01/327703.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/327703.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/08/01/327703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/327703.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/327703.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java 异步socket&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/08/01/327703.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/327703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-08-01 21:19 <a href="http://www.blogjava.net/jake1036/archive/2010/08/01/327703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java UDP 操作</title><link>http://www.blogjava.net/jake1036/archive/2010/07/20/326467.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Tue, 20 Jul 2010 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/20/326467.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326467.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/20/326467.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326467.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍了java 中UDP 传递消息&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/20/326467.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-20 21:19 <a href="http://www.blogjava.net/jake1036/archive/2010/07/20/326467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java socket连接池</title><link>http://www.blogjava.net/jake1036/archive/2010/07/16/326352.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Fri, 16 Jul 2010 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/16/326352.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326352.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/16/326352.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326352.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: java实现了socket连接池&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/16/326352.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-16 22:37 <a href="http://www.blogjava.net/jake1036/archive/2010/07/16/326352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java线程池的概念 </title><link>http://www.blogjava.net/jake1036/archive/2010/07/14/326108.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Wed, 14 Jul 2010 13:08:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/14/326108.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326108.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/14/326108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326108.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用java创建线程池&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/14/326108.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-14 21:08 <a href="http://www.blogjava.net/jake1036/archive/2010/07/14/326108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回调对象列表方式来实现线程和主类之间的交互</title><link>http://www.blogjava.net/jake1036/archive/2010/07/14/326085.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Wed, 14 Jul 2010 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/14/326085.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326085.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/14/326085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 接口列表实现 线程与主类的交互。&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/14/326085.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-14 15:06 <a href="http://www.blogjava.net/jake1036/archive/2010/07/14/326085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用回调实例方法进行线程与主类的交互</title><link>http://www.blogjava.net/jake1036/archive/2010/07/14/326077.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Wed, 14 Jul 2010 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/14/326077.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326077.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/14/326077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326077.html</trackback:ping><description><![CDATA[&nbsp;一 概述&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在上一篇随笔中使用的是静态回调函数，故Thread类中没有主类的实例对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是如果调用主类的实例方法，那么在线程类中就需要有主类的实例对象， 这个实例对象一般是通过线程类的构造函数中的参数传递的。<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;二&nbsp;代码&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和上一篇随笔代码相似，只是在线程类中增加了一个主类 的一个实例变量，通过该实例来调用主类的实例函数。<br />
<br />
&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;线程类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成员变量中增加一个主类的成员变量callBack。&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;cn.bupt.thread;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.security.DigestInputStream;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.security.MessageDigest;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.security.NoSuchAlgorithmException;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;cn.bupt.test.CallbackDigestUserInterface;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_260_1241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_260_1241_Open_Text.style.display='none'; Codehighlighter1_260_1241_Closed_Image.style.display='inline'; Codehighlighter1_260_1241_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_260_1241_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_260_1241_Closed_Text.style.display='none'; Codehighlighter1_260_1241_Open_Image.style.display='inline'; Codehighlighter1_260_1241_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadDemo&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Runnable</span><span id="Codehighlighter1_260_1241_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_260_1241_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;File&nbsp;input&nbsp;;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[]&nbsp;digest&nbsp;;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;CallbackDigestUserInterface&nbsp;callBack&nbsp;;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ThreadDemo(File&nbsp;input&nbsp;,&nbsp;CallbackDigestUserInterface&nbsp;callBack)<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_430_485_Open_Image" onclick="this.style.display='none'; Codehighlighter1_430_485_Open_Text.style.display='none'; Codehighlighter1_430_485_Closed_Image.style.display='inline'; Codehighlighter1_430_485_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_430_485_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_430_485_Closed_Text.style.display='none'; Codehighlighter1_430_485_Open_Image.style.display='inline'; Codehighlighter1_430_485_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_430_485_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_430_485_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.input&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;input&nbsp;;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.callBack&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;callBack&nbsp;;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[]&nbsp;getDigest()<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_518_539_Open_Image" onclick="this.style.display='none'; Codehighlighter1_518_539_Open_Text.style.display='none'; Codehighlighter1_518_539_Closed_Image.style.display='inline'; Codehighlighter1_518_539_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_518_539_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_518_539_Closed_Text.style.display='none'; Codehighlighter1_518_539_Open_Image.style.display='inline'; Codehighlighter1_518_539_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_518_539_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_518_539_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;digest&nbsp;;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img id="Codehighlighter1_575_1233_Open_Image" onclick="this.style.display='none'; Codehighlighter1_575_1233_Open_Text.style.display='none'; Codehighlighter1_575_1233_Closed_Image.style.display='inline'; Codehighlighter1_575_1233_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_575_1233_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_575_1233_Closed_Text.style.display='none'; Codehighlighter1_575_1233_Open_Image.style.display='inline'; Codehighlighter1_575_1233_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</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()&nbsp;</span><span id="Codehighlighter1_575_1233_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_575_1233_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img id="Codehighlighter1_585_925_Open_Image" onclick="this.style.display='none'; Codehighlighter1_585_925_Open_Text.style.display='none'; Codehighlighter1_585_925_Closed_Image.style.display='inline'; Codehighlighter1_585_925_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_585_925_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_585_925_Closed_Text.style.display='none'; Codehighlighter1_585_925_Open_Image.style.display='inline'; Codehighlighter1_585_925_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_585_925_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_585_925_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;in&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileInputStream(input)&nbsp;;<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;sha&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;MessageDigest.getInstance(</span><span style="color: #000000">"</span><span style="color: #000000">SHA</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;;<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigestInputStream&nbsp;din&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DigestInputStream(in&nbsp;,&nbsp;sha)&nbsp;;<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;b&nbsp;;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">((b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;din.read())&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;;<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;din.close()&nbsp;;<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;digest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sha.digest()&nbsp;;<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callBack.receiveDigest(digest,&nbsp;input.getName())&nbsp;;<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img id="Codehighlighter1_959_1025_Open_Image" onclick="this.style.display='none'; Codehighlighter1_959_1025_Open_Text.style.display='none'; Codehighlighter1_959_1025_Closed_Image.style.display='inline'; Codehighlighter1_959_1025_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_959_1025_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_959_1025_Closed_Text.style.display='none'; Codehighlighter1_959_1025_Open_Image.style.display='inline'; Codehighlighter1_959_1025_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(FileNotFoundException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_959_1025_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_959_1025_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><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">46</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img id="Codehighlighter1_1062_1128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1062_1128_Open_Text.style.display='none'; Codehighlighter1_1062_1128_Closed_Image.style.display='inline'; Codehighlighter1_1062_1128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1062_1128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1062_1128_Closed_Text.style.display='none'; Codehighlighter1_1062_1128_Open_Image.style.display='inline'; Codehighlighter1_1062_1128_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1062_1128_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1062_1128_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><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">49</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img id="Codehighlighter1_1152_1218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1152_1218_Open_Text.style.display='none'; Codehighlighter1_1152_1218_Closed_Image.style.display='inline'; Codehighlighter1_1152_1218_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1152_1218_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1152_1218_Closed_Text.style.display='none'; Codehighlighter1_1152_1218_Open_Image.style.display='inline'; Codehighlighter1_1152_1218_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_1152_1218_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1152_1218_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><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">52</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;<br />
&nbsp;&nbsp; 2&nbsp; 主类&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>主类通过线程类的构造函数将 自身对象传递进去 。<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;cn.bupt.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;cn.bupt.thread.ThreadDemo;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_121_754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_754_Open_Text.style.display='none'; Codehighlighter1_121_754_Closed_Image.style.display='inline'; Codehighlighter1_121_754_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_121_754_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_121_754_Closed_Text.style.display='none'; Codehighlighter1_121_754_Open_Image.style.display='inline'; Codehighlighter1_121_754_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CallbackDigestUserInterface&nbsp;</span><span id="Codehighlighter1_121_754_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_121_754_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_181_390_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_390_Open_Text.style.display='none'; Codehighlighter1_181_390_Closed_Image.style.display='inline'; Codehighlighter1_181_390_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_181_390_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_181_390_Closed_Text.style.display='none'; Codehighlighter1_181_390_Open_Image.style.display='inline'; Codehighlighter1_181_390_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;receiveDigest(</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[]&nbsp;digest&nbsp;,&nbsp;String&nbsp;name)</span><span id="Codehighlighter1_181_390_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_181_390_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer(name)&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.append(</span><span style="color: #000000">"</span><span style="color: #000000">:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;;<br />
<img id="Codehighlighter1_301_343_Open_Image" onclick="this.style.display='none'; Codehighlighter1_301_343_Open_Text.style.display='none'; Codehighlighter1_301_343_Closed_Image.style.display='inline'; Codehighlighter1_301_343_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_301_343_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_301_343_Closed_Text.style.display='none'; Codehighlighter1_301_343_Open_Image.style.display='inline'; Codehighlighter1_301_343_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;digest.length&nbsp;;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_301_343_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_301_343_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.append(digest[j]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">result&nbsp;:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;result)&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_393_416_Open_Image" onclick="this.style.display='none'; Codehighlighter1_393_416_Open_Text.style.display='none'; Codehighlighter1_393_416_Closed_Image.style.display='inline'; Codehighlighter1_393_416_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_393_416_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_393_416_Closed_Text.style.display='none'; Codehighlighter1_393_416_Open_Image.style.display='inline'; Codehighlighter1_393_416_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_393_416_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_393_416_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_458_752_Open_Image" onclick="this.style.display='none'; Codehighlighter1_458_752_Open_Text.style.display='none'; Codehighlighter1_458_752_Closed_Image.style.display='inline'; Codehighlighter1_458_752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_458_752_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_458_752_Closed_Text.style.display='none'; Codehighlighter1_458_752_Open_Image.style.display='inline'; Codehighlighter1_458_752_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;</span><span id="Codehighlighter1_458_752_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_458_752_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;args.length&nbsp;;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_542_747_Open_Image" onclick="this.style.display='none'; Codehighlighter1_542_747_Open_Text.style.display='none'; Codehighlighter1_542_747_Closed_Image.style.display='inline'; Codehighlighter1_542_747_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_542_747_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_542_747_Closed_Text.style.display='none'; Codehighlighter1_542_747_Open_Image.style.display='inline'; Codehighlighter1_542_747_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_542_747_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_542_747_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(args[i])&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CallbackDigestUserInterface&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CallbackDigestUserInterface()&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ThreadDemo&nbsp;td&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadDemo(f&nbsp;,&nbsp;u)&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&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;Thread(td)&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.start()&nbsp;;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;&nbsp;<br />
<br />
&nbsp;3 优点&nbsp;<br />
&nbsp;&nbsp;&nbsp; 回调机制可以处理涉及更多的线程，对象和类的更复杂的情况，如果有多个对象关心线程的执行结果<br />
&nbsp;&nbsp;&nbsp; 那么线程可以保存一个回调函数列表，某个对象可以通过调用thread类 或者 Runnable 的方法，把自己添加 <br />
&nbsp;&nbsp;&nbsp; 到列表中，。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 如果有多个类的实例关心结果，那么就可以定义一个新的interface ，所有这些类都应该实现这个新的接口，<br />
&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;
<img src ="http://www.blogjava.net/jake1036/aggbug/326077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-14 14:14 <a href="http://www.blogjava.net/jake1036/archive/2010/07/14/326077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用回调实例方法进行线程与主类的交互</title><link>http://www.blogjava.net/jake1036/archive/2010/07/14/326078.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Wed, 14 Jul 2010 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/14/326078.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326078.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/14/326078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326078.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用回调实例方法进行线程与主类的交互&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/14/326078.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-14 14:14 <a href="http://www.blogjava.net/jake1036/archive/2010/07/14/326078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用回调函数在线程和主类中传递信息</title><link>http://www.blogjava.net/jake1036/archive/2010/07/14/326068.html</link><dc:creator>buptduming</dc:creator><author>buptduming</author><pubDate>Wed, 14 Jul 2010 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/jake1036/archive/2010/07/14/326068.html</guid><wfw:comment>http://www.blogjava.net/jake1036/comments/326068.html</wfw:comment><comments>http://www.blogjava.net/jake1036/archive/2010/07/14/326068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jake1036/comments/commentRss/326068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jake1036/services/trackbacks/326068.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 回调函数实现线程类和主类之间的数据交互&nbsp;&nbsp;<a href='http://www.blogjava.net/jake1036/archive/2010/07/14/326068.html'>阅读全文</a><img src ="http://www.blogjava.net/jake1036/aggbug/326068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jake1036/" target="_blank">buptduming</a> 2010-07-14 11:28 <a href="http://www.blogjava.net/jake1036/archive/2010/07/14/326068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>