﻿<?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-neverend的日志-随笔分类-编程语言</title><link>http://www.blogjava.net/neverend/category/46472.html</link><description>不记录，终将被遗忘。
一万年太久，只争朝夕。
他们用数字构建了整个世界。</description><language>zh-cn</language><lastBuildDate>Mon, 23 Jul 2012 02:15:31 GMT</lastBuildDate><pubDate>Mon, 23 Jul 2012 02:15:31 GMT</pubDate><ttl>60</ttl><item><title>JAVA注解总结</title><link>http://www.blogjava.net/neverend/archive/2012/01/30/369003.html</link><dc:creator>neverend</dc:creator><author>neverend</author><pubDate>Mon, 30 Jan 2012 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/neverend/archive/2012/01/30/369003.html</guid><wfw:comment>http://www.blogjava.net/neverend/comments/369003.html</wfw:comment><comments>http://www.blogjava.net/neverend/archive/2012/01/30/369003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/neverend/comments/commentRss/369003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/neverend/services/trackbacks/369003.html</trackback:ping><description><![CDATA[<div>关于JAVA注解，已经不止一次的碰到了，但是没有系统的研究过。<br /><br />最近打算搞清楚以下问题：<br /><br />1. 注解的原理与使用<br />
<div>2. Java提供的标准注解分析。</div>
<div>3. Spring与Junit的常用注解分析。</div>
<div>4. 如何合理的设计和使用注解</div><br />
<div>1. 注解的原理与使用</div>&nbsp;&nbsp;&nbsp; 阅读了《Java编程思想》讲注解的一章，整理笔记如下：<br />&nbsp;&nbsp;&nbsp; 1.1 定义注解<br />&nbsp;&nbsp;&nbsp; 使用元注解定义注解，元注解有四种：<br />&nbsp;&nbsp;&nbsp; @Target(ElementType.[type])<br />&nbsp;&nbsp;&nbsp; [type]={METHOD, FIELD, TYPE(类、接口、枚举声明), CONSTRUCTOR, LOCAL_VARIABLE, PARAMETER}<br />&nbsp;&nbsp;&nbsp; @Retention(<span style="color: #000000">RetentionPolicy.[policy]</span>)<br />&nbsp;&nbsp;&nbsp; [policy]={SOURCE, CLASS, RUNTIME(反射机制可读取)}<br />&nbsp;&nbsp;&nbsp; @Documented 表示将此注解包含到Javadoc中<br />&nbsp;&nbsp;&nbsp; @Inherited 表示允许子类继承父类的注解<br />&nbsp;&nbsp;&nbsp; 例子：<br />
<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"><!--<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">:annotations/UserCase.java</span><span style="color: #008000"><br /></span><span style="color: #000000"><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.annotation.</span><span style="color: #000000">*</span><span style="color: #000000">;<br /><br />@Target(ElementType.METHOD)<br />@Retention(RetentionPolicy.RUNTIME)<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;UseCases&nbsp;{<br />&nbsp;&nbsp;&nbsp; public int value() default 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id() default 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;description()&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">no&nbsp;description</span><span style="color: #000000">"</span><span style="color: #000000">;<br />}</span></div>&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; 1.2使用注解<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @UserCase(id=10, description="my desccription")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注解元素必须有确定的值，要么在定义注解的默认值中指定，要么在使用注解时指定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非基本类型的注解元素的值不可为null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注解快捷方式: 如果注解元素声明为value()，则在使用注解时如果只声明value，可以只写值，不必写名值对。例如可写为@UseCase(10)<br />&nbsp;&nbsp;&nbsp; 1.3编写注解处理器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过反射机制获取注解元素的值： Method.getAnnotation(), Field.getDeclaredAnnotations()等方法<br />&nbsp;&nbsp;&nbsp; 1.4注解的使用场景<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 统计系统用例实现情况 &nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由JavaBean自动生成数据库建表SQL<br />&nbsp;&nbsp;&nbsp; 1.5 JDK提供的注解工具apt<br />&nbsp; &nbsp; 1.6 基于注解的单元测试&nbsp; &nbsp;&nbsp; <br />待续&#8230;&#8230;<br />2. Java提供的标准注解分析。<br />&nbsp;&nbsp;&nbsp; @Override<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_170_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_170_Open_Text.style.display='none'; Codehighlighter1_0_170_Closed_Image.style.display='inline'; Codehighlighter1_0_170_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_0_170_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_170_Closed_Text.style.display='none'; Codehighlighter1_0_170_Open_Image.style.display='inline'; Codehighlighter1_0_170_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"><span id="Codehighlighter1_0_170_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">/**/</span><span id="Codehighlighter1_0_170_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;@(#)Override.java&nbsp;&nbsp;&nbsp;&nbsp;1.5&nbsp;04/02/09<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Copyright&nbsp;2004&nbsp;Sun&nbsp;Microsystems,&nbsp;Inc.&nbsp;All&nbsp;rights&nbsp;reserved.<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;SUN&nbsp;PROPRIETARY/CONFIDENTIAL.&nbsp;Use&nbsp;is&nbsp;subject&nbsp;to&nbsp;license&nbsp;terms.<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;java.lang;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.annotation.</span><span style="color: #000000">*</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_225_531_Open_Image" onclick="this.style.display='none'; Codehighlighter1_225_531_Open_Text.style.display='none'; Codehighlighter1_225_531_Closed_Image.style.display='inline'; Codehighlighter1_225_531_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_225_531_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_225_531_Closed_Text.style.display='none'; Codehighlighter1_225_531_Open_Image.style.display='inline'; Codehighlighter1_225_531_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_225_531_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_225_531_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Indicates&nbsp;that&nbsp;a&nbsp;method&nbsp;declaration&nbsp;is&nbsp;intended&nbsp;to&nbsp;override&nbsp;a<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;method&nbsp;declaration&nbsp;in&nbsp;a&nbsp;superclass.&nbsp;&nbsp;If&nbsp;a&nbsp;method&nbsp;is&nbsp;annotated&nbsp;with<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;this&nbsp;annotation&nbsp;type&nbsp;but&nbsp;does&nbsp;not&nbsp;override&nbsp;a&nbsp;superclass&nbsp;method,<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;compilers&nbsp;are&nbsp;required&nbsp;to&nbsp;generate&nbsp;an&nbsp;error&nbsp;message.<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;&nbsp;Joshua&nbsp;Bloch<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@since</span><span style="color: #008000">&nbsp;1.5<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />@Target(ElementType.METHOD)<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />@Retention(RetentionPolicy.SOURCE)<br /><img id="Codehighlighter1_623_625_Open_Image" onclick="this.style.display='none'; Codehighlighter1_623_625_Open_Text.style.display='none'; Codehighlighter1_623_625_Closed_Image.style.display='inline'; Codehighlighter1_623_625_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_623_625_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_623_625_Closed_Text.style.display='none'; Codehighlighter1_623_625_Open_Image.style.display='inline'; Codehighlighter1_623_625_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;@</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Override&nbsp;</span><span id="Codehighlighter1_623_625_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_623_625_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>&nbsp;&nbsp;&nbsp;&nbsp;注解@Override的代码非常简单，可用于注解类的方法，并在Source级别可用。&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; @Deprecated<br />&nbsp;&nbsp;&nbsp; 级别为Runtime&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; @SuppressWarnings<br />&nbsp;&nbsp;&nbsp;&nbsp;级别为source，经常的使用方式为@SuppressWarnings("unchecked")<br />3. Spring与Junit的常用注解分析。<br />&nbsp;&nbsp;&nbsp; @Test<br />&nbsp;&nbsp;&nbsp; <br />
<div>4. 如何合理的设计和使用注解<br />&nbsp;&nbsp;&nbsp; 使用注解标记字段和方法，可通过反射的手段截取注解及其标记的字段和方法的元数据，并根据需求对元数据进行处理。<br />&nbsp;&nbsp;&nbsp; 它赋予了字段和方法额外的意义，提供了一种统一处理字段和方法的优雅的方式。<br />&nbsp;&nbsp;&nbsp;&nbsp;注解更多的意义是提供了一种设计模式，在本质上它没有增强Java的能力，使用注解实现的功能都可以以非注解的方式实现，只是代码可能不是很好看而已</div></div><img src ="http://www.blogjava.net/neverend/aggbug/369003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/neverend/" target="_blank">neverend</a> 2012-01-30 11:16 <a href="http://www.blogjava.net/neverend/archive/2012/01/30/369003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>InterruptedException的解读</title><link>http://www.blogjava.net/neverend/archive/2011/06/14/352310.html</link><dc:creator>neverend</dc:creator><author>neverend</author><pubDate>Tue, 14 Jun 2011 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/neverend/archive/2011/06/14/352310.html</guid><wfw:comment>http://www.blogjava.net/neverend/comments/352310.html</wfw:comment><comments>http://www.blogjava.net/neverend/archive/2011/06/14/352310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/neverend/comments/commentRss/352310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/neverend/services/trackbacks/352310.html</trackback:ping><description><![CDATA[最近写了些多线程的程序，用Thread.sleep()的时候有时会碰到InterruptedException。查了一些资料，下面是我自己的一些理解。<br /><br />阻塞方法<br />一些多线程相关的方法是阻塞方法，比如Thread.sleep(), Thread.wait(), Thread.join()。<br /><br />这些方法的执行通常需要比较长的时间来完成，当代码执行到阻塞方法时，一般要等待该方法返回后<br /><br />才能继续往下执行，而InterruptedException提供了一种特殊的机制提前结束阻塞方法。<br /><br />中断变量<br />每个线程都会维护一个bool变量，表示线程处于中断（true）或者非中断状态(false)。在线程初始的情况下中断变量为false。<br /><br />这个变量的bool值可以通过Thread.isInterrupted()方法来读取，通过Thread.interrupted()方法来清除中断（即将中断变量置为false）。<br /><br />线程中断<br />一个线程可以通过调用Thread.interrupt()方法来中断另外一个线程，具体过程如下：<br /><br />1. 中断变量被设置为true。<br /><br />2. 如果线程执行到了阻塞方法，那么该方法取消阻塞，并将中断变量重新置为false。<br />（这种机制是通过阻塞方法内部不断轮询中断变量的值来实现的）<br /><br />例子：
<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"><!--<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: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadTest&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Runnable&nbsp;{<br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;{<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">before&nbsp;sleep</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000">5000</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName());<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().interrupt();<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">after&nbsp;interrupt</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">after&nbsp;sleep</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(</span><span style="color: #000000">5000</span><span style="color: #000000">);<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&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<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">e.printStackTrace();</span><span style="color: #008000"><br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Thread.currentThread().getName());<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().interrupt();<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">after&nbsp;interrupt</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">after&nbsp;sleep</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ThreadBasic&nbsp;{<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&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(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ThreadTest(),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">thread-1</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.start();<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.interrupt();<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(t.isInterrupted());<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">}</span></div><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/neverend/aggbug/352310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/neverend/" target="_blank">neverend</a> 2011-06-14 20:03 <a href="http://www.blogjava.net/neverend/archive/2011/06/14/352310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux/BSD账号密码明文生成密文的Java代码</title><link>http://www.blogjava.net/neverend/archive/2010/11/06/337424.html</link><dc:creator>neverend</dc:creator><author>neverend</author><pubDate>Sat, 06 Nov 2010 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/neverend/archive/2010/11/06/337424.html</guid><wfw:comment>http://www.blogjava.net/neverend/comments/337424.html</wfw:comment><comments>http://www.blogjava.net/neverend/archive/2010/11/06/337424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/neverend/comments/commentRss/337424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/neverend/services/trackbacks/337424.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Linux/BSD在/etc/shadow文件中存放加密过的密码，加密函数是crypt()，具体的源程序在glibc里面的crypt目录下。crypt()函数最初使用DES算法加密密码明文，生成的密文格式是2个字符的salt和11个字符的DES输出;后来又出现了使用MD5算法生成密文的crypt()函数，这种方式更加安全。ReadHat命令行下使用authconfig-tu...&nbsp;&nbsp;<a href='http://www.blogjava.net/neverend/archive/2010/11/06/337424.html'>阅读全文</a><img src ="http://www.blogjava.net/neverend/aggbug/337424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/neverend/" target="_blank">neverend</a> 2010-11-06 21:14 <a href="http://www.blogjava.net/neverend/archive/2010/11/06/337424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>