﻿<?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-道生一,一生二,二生三,三生万物-文章分类-Java 相关</title><link>http://www.blogjava.net/doodoosun/category/31753.html</link><description>万物皆备于我</description><language>zh-cn</language><lastBuildDate>Tue, 02 Dec 2014 00:17:44 GMT</lastBuildDate><pubDate>Tue, 02 Dec 2014 00:17:44 GMT</pubDate><ttl>60</ttl><item><title>Java 反射机制</title><link>http://www.blogjava.net/doodoosun/articles/420899.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Mon, 01 Dec 2014 16:50:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/420899.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/420899.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/420899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/420899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/420899.html</trackback:ping><description><![CDATA[<div>Java 中，无论生成多个类的对象，这些对象都会对应于同一个Class对象<br /><br /><div>2.获取某个类或某个对象所对应的Class对象常用的3种方式</div><div>a)使用Class类的静态方法forName:Class.forName("java.lang.String")</div><div>b)使用类语法String.class</div><div>c)使用对象的getClass（）方法：String s ="aa";</div><div>Class&lt;?&gt; clazz= s.getClass();&nbsp;<br /></div><div>&nbsp; 不带参数的构造方法，生成对象</div><div>&nbsp;a)先获得Class对象，然后通过Class对象newInstance() 方法直接生成对象。</div><div>&nbsp;b) 先获得Class对象，然后通过该对象获得对应的Construtor 对象，</div></div><div></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.doodoosun;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.lang.reflect.InvocationTargetException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.lang.reflect.Method;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ReflectTest&nbsp;{<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;add&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;param1,<span style="color: #0000FF; ">int</span>&nbsp;param2){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;param1+param2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;echo&nbsp;(String&nbsp;message){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"Hello&nbsp;:"+message;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&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;<span style="color: #0000FF; ">throws</span>&nbsp;InstantiationException,&nbsp;IllegalAccessException,&nbsp;NoSuchMethodException,&nbsp;SecurityException,&nbsp;IllegalArgumentException,&nbsp;InvocationTargetException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&lt;?&gt;&nbsp;classType&nbsp;=&nbsp;ReflectTest.<span style="color: #0000FF; ">class</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;reflectTest&nbsp;=&nbsp;classType.newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;addMethod&nbsp;=&nbsp;classType.getMethod("add",<span style="color: #0000FF; ">new</span>&nbsp;Class[]{<span style="color: #0000FF; ">int</span>.<span style="color: #0000FF; ">class</span>,<span style="color: #0000FF; ">int</span>.<span style="color: #0000FF; ">class</span>});<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;=&nbsp;addMethod.invoke(reflectTest,<span style="color: #0000FF; ">new</span>&nbsp;Object[]{1,2});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("-------"+(Integer)result);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;echoMethod&nbsp;=&nbsp;classType.getMethod("echo",&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Class[]{String.<span style="color: #0000FF; ">class</span>});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result2&nbsp;&nbsp;=&nbsp;echoMethod.invoke(reflectTest,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Object[]{"tom"});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><img src ="http://www.blogjava.net/doodoosun/aggbug/420899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2014-12-02 00:50 <a href="http://www.blogjava.net/doodoosun/articles/420899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk5多线程(转) </title><link>http://www.blogjava.net/doodoosun/articles/220436.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Wed, 06 Aug 2008 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/220436.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/220436.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/220436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/220436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/220436.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jdk5多线程(转) 最近JDK6 RC已经发布了，而对于JDK5的新特性还来不及使用，虽然在项目中还没有使用，但可以写一些Demo体验一下Tiger的魅力，现在的时代就是体验的时代，事事都要亲历亲为才能有发言权，怎么有点毛主席&#8220;实事求是&#8221;的感觉。JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中。Doug Lea确实是一个牛人，能教书，能...&nbsp;&nbsp;<a href='http://www.blogjava.net/doodoosun/articles/220436.html'>阅读全文</a><img src ="http://www.blogjava.net/doodoosun/aggbug/220436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-08-06 14:27 <a href="http://www.blogjava.net/doodoosun/articles/220436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK1.5中的线程池使用简介</title><link>http://www.blogjava.net/doodoosun/articles/220221.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Tue, 05 Aug 2008 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/220221.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/220221.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/220221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/220221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/220221.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/surffish/articles/12755.html">JDK1.5中的线程池使用简介（无名）</a> </div>
<p>在多线程大师Doug Lea的贡献下，在JDK1.5中加入了许多对并发特性的支持，例如：线程池。</p>
<p>一、简介<br />
线程池类为 java.util.concurrent.ThreadPoolExecutor，常用构造方法为：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long keepAliveTime, TimeUnit unit, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BlockingQueue<runnable> workQueue, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RejectedExecutionHandler handler)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; corePoolSize：&nbsp;&nbsp; 线程池维护线程的最少数量<br />
&nbsp;&nbsp;&nbsp; maximumPoolSize：线程池维护线程的最大数量<br />
&nbsp;&nbsp;&nbsp; keepAliveTime：&nbsp; 线程池维护线程所允许的空闲时间<br />
&nbsp;&nbsp;&nbsp; unit：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程池维护线程所允许的空闲时间的单位<br />
&nbsp;&nbsp;&nbsp; workQueue：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程池所使用的缓冲队列<br />
&nbsp;&nbsp;&nbsp; handler：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 线程池对拒绝任务的处理策略<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 一个任务通过 execute(Runnable)方法被添加到线程池，任务就是一个 Runnable类型的对象，任务的执行方法就是 Runnable类型对象的run()方法。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 当一个任务通过execute(Runnable)方法欲添加到线程池时：<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 如果此时线程池中的数量小于corePoolSize，即使线程池中的线程都处于空闲状态，也要创建新的线程来处理被添加的任务。</p>
<p>&nbsp;&nbsp;&nbsp; 如果此时线程池中的数量等于 corePoolSize，但是缓冲队列 workQueue未满，那么任务被放入缓冲队列。</p>
<p>&nbsp;&nbsp;&nbsp; 如果此时线程池中的数量大于corePoolSize，缓冲队列workQueue满，并且线程池中的数量小于maximumPoolSize，建新的线程来处理被添加的任务。</p>
<p>&nbsp;&nbsp;&nbsp; 如果此时线程池中的数量大于corePoolSize，缓冲队列workQueue满，并且线程池中的数量等于maximumPoolSize，那么通过 handler所指定的策略来处理此任务。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 也就是：处理任务的优先级为：<br />
&nbsp;&nbsp;&nbsp; 核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize，如果三者都满了，使用handler处理被拒绝的任务。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 当线程池中的线程数量大于 corePoolSize时，如果某线程空闲时间超过keepAliveTime，线程将被终止。这样，线程池可以动态的调整池中的线程数。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性：<br />
&nbsp;&nbsp;&nbsp; NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; workQueue我常用的是：java.util.concurrent.ArrayBlockingQueue<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; handler有四个选择：<br />
&nbsp;&nbsp;&nbsp; ThreadPoolExecutor.AbortPolicy()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抛出java.util.concurrent.RejectedExecutionException异常<br />
&nbsp;&nbsp;&nbsp; ThreadPoolExecutor.CallerRunsPolicy()&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重试添加当前的任务，他会自动重复调用execute()方法<br />
&nbsp;&nbsp;&nbsp; ThreadPoolExecutor.DiscardOldestPolicy()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抛弃旧的任务<br />
&nbsp;&nbsp;&nbsp; ThreadPoolExecutor.DiscardPolicy()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抛弃当前的任务</p>
<p>&nbsp;&nbsp;&nbsp; <br />
二、一般用法举例<br />
//------------------------------------------------------------<br />
//TestThreadPool.java<br />
//package cn.simplelife.exercise;</p>
<p>import java.io.Serializable;<br />
import java.util.concurrent.ArrayBlockingQueue;<br />
import java.util.concurrent.ThreadPoolExecutor;<br />
import java.util.concurrent.TimeUnit;</p>
<p>public class TestThreadPool {</p>
<p>&nbsp;&nbsp;&nbsp; private static int produceTaskSleepTime = 2;<br />
&nbsp;&nbsp;&nbsp; private static int consumeTaskSleepTime = 2000;<br />
&nbsp;&nbsp;&nbsp; private static int produceTaskMaxNumber = 10;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;public static void main(String[] args) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造一个线程池&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 3,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeUnit.SECONDS, new ArrayBlockingQueue<runnable>(3),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new ThreadPoolExecutor.DiscardOldestPolicy());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=1;i&lt;=produceTaskMaxNumber;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String task = "task@ " + i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("put " + task);<br />
&nbsp;&nbsp;&nbsp;&nbsp;threadPool.execute(new ThreadPoolTask(task));<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//便于观察，等待一段时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.sleep(produceTaskSleepTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 线程池执行的任务<br />
&nbsp; * @author hdpan<br />
&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public static class ThreadPoolTask implements Runnable,Serializable{<br />
&nbsp;&nbsp;&nbsp; &nbsp;private static final long serialVersionUID = 0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;//保存任务所需要的数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Object threadPoolTaskData;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPoolTask(Object tasks){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.threadPoolTaskData = tasks;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //处理一个任务，这里的处理方式太简单了，仅仅是一个打印语句<br />
&nbsp;&nbsp;&nbsp;System.out.println("start .."+threadPoolTaskData);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ////便于观察，等待一段时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.sleep(consumeTaskSleepTime);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; threadPoolTaskData = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object getTask(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.threadPoolTaskData;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
//------------------------------------------------------------<br />
说明：<br />
1、在这段程序中，一个任务就是一个Runnable类型的对象，也就是一个ThreadPoolTask类型的对象。</p>
<p>2、一般来说任务除了处理方式外，还需要处理的数据，处理的数据通过构造方法传给任务。</p>
<p>3、在这段程序中，main()方法相当于一个残忍的领导，他派发出许多任务，丢给一个叫 threadPool的任劳任怨的小组来做。</p>
<p>&nbsp;&nbsp;&nbsp; 这个小组里面队员至少有两个，如果他们两个忙不过来， 任务就被放到任务列表里面。</p>
<p>&nbsp;&nbsp;&nbsp; 如果积压的任务过多，多到任务列表都装不下(超过3个)的时候，就雇佣新的队员来帮忙。但是基于成本的考虑，不能雇佣太多的队员， 至多只能雇佣 4个。</p>
<p>&nbsp;&nbsp;&nbsp; 如果四个队员都在忙时，再有新的任务， 这个小组就处理不了了，任务就会被通过一种策略来处理，我们的处理方式是不停的派发， 直到接受这个任务为止(更残忍！呵呵)。</p>
<p>&nbsp;&nbsp;&nbsp; 因为队员工作是需要成本的，如果工作很闲，闲到 3SECONDS都没有新的任务了，那么有的队员就会被解雇了，但是，为了小组的正常运转，即使工作再闲，小组的队员也不能少于两个。</p>
<p>4、通过调整 produceTaskSleepTime和 consumeTaskSleepTime的大小来实现对派发任务和处理任务的速度的控制， 改变这两个值就可以观察不同速率下程序的工作情况。</p>
<p>5、通过调整4中所指的数据，再加上调整任务丢弃策略， 换上其他三种策略，就可以看出不同策略下的不同处理方式。</p>
<p>6、对于其他的使用方法，参看jdk的帮助，很容易理解和使用。</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/220221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-08-05 16:45 <a href="http://www.blogjava.net/doodoosun/articles/220221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于ClassName.class.getResourceAsStream的路径问题 </title><link>http://www.blogjava.net/doodoosun/articles/214699.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Mon, 14 Jul 2008 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/214699.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/214699.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/214699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/214699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/214699.html</trackback:ping><description><![CDATA[<p>对ClassName.class.getResourceAsStream的路径问题比较模糊，现在把研究的结果写一下：</p>
<p>ClassName是这个Class的名称，这里假设为MyClass，处于MyPackage.MyChildPackage包中，如果你将source.props文件放在Classes文件夹中的时候，可以这样写ClassName.class.getResourceAsStream(/source.props)</p>
<p>如果你想把props文件放在包中的时候，假设放到MyPackage.MyChildPackage中的res文件夹，可以这样写ClassName.class.getResourceAsStream(/MyPackage/MyChildPackage/res/source.props)，/代表的是包的.</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/214699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-07-14 13:07 <a href="http://www.blogjava.net/doodoosun/articles/214699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件上传的全部解决方案</title><link>http://www.blogjava.net/doodoosun/articles/209381.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Fri, 20 Jun 2008 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/209381.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/209381.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/209381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/209381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/209381.html</trackback:ping><description><![CDATA[<a href="http://caterpillar.onlyfun.net/GossipCN/JSPServlet/JSPServlet.htm">JSP/Servlet: Oreilly MultiPartRequest 档案上传</a>&nbsp; http://caterpillar.onlyfun.net/GossipCN/JSPServlet/FileUpload.htm<br />
<small>使用浏览器进行档案上传时，是使用multipart/form-data编码，然而Servlet容器并不会自动帮我们处理编码，而必须由程式设计人员自行处理，在这个部份，我们可以使用Oreilly所提供的上传套件MultiPartRequest，您可以至以下的网址下载，档案是cos- 05Nov2002.zip：<br />
<br style="font-family: Courier New,Courier,monospace" />
</small>
<div style="margin-left: 40px"><small><span style="font-weight: bold; font-family: Courier New,Courier,monospace">http://www.servlets.com/cos/index.html</span><br />
</small></div>
<small><br />
解开zip档案之后，在lib目录下可以找到cos.jar，将它复制至您的Web应用程式的WEB-INF/lib下就可以了，基本上， Oreilly的MultiPartRequest相当的容易使用，它可以同时处理多个档案的上传，并且提供多个方法可以让您取得上传档案的相关资讯。<br />
<br />
这边提供一个简单的例子，首先撰写上传的表单： </small><br />
<ul>
    <li>form.htm </li>
</ul>
<pre>&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;title&gt;档案上传&lt;/title&gt; <br />
&lt;meta http-equiv="Content-Type"<br />
content="text/html; charset=Big5"&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;b&gt;档案上传&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;<br />
<br />
&lt;form name="UploadForm" <br />
enctype="multipart/form-data" <br />
method="post" action="upload.jsp"&gt; <br />
&lt;input type="file" name="File1" size="20" maxlength="20"&gt; <br />
&lt;br&gt; <br />
&lt;input type="file" name="File2" size="20" maxlength="20"&gt;    <br />
&lt;br&gt; <br />
&lt;input type="submit"value="上传"&gt; <br />
&lt;/form&gt;<br />
<br />
&lt;/body&gt; <br />
&lt;/html&gt; </pre>
<br />
<small>这边示范两个档案的上传，表单的enctype必须设定为multipart/form-data，而上传方法是post，表单元件的输入型态是 file，当然，上传的档案数在实际应用时，是可以用JavaScript等方法来动态进行选择的。<br />
<br />
上传的动作处理，撰写在upload.jsp中： </small><br />
<ul>
    <li>upload.jsp </li>
</ul>
<pre>&lt;%@page import="com.oreilly.servlet.MultipartRequest" %&gt; <br />
&lt;% <br />
String saveDirectory = "/home/caterpillar/files/"; <br />
// 限制上传之档案大小为 5 MB <br />
int maxPostSize = 5 * 1024 * 1024 ; <br />
MultipartRequest multi = new MultipartRequest(request , <br />
saveDirectory , maxPostSize, "MS950"); <br />
out.println("档案上传OK"); <br />
%&gt; </pre>
<br />
<small>注意到程式中import了com.oreilly.servlet.MultipartRequest， MultipartRequest可以限制档案上传的大小，最后一个参数是上传档案名称的编码，如果不设定的话，预设是ISO-8859-1，为了支援繁体中文档名，程式中设定为MS950，如果要支援简体中文档名，可以设定为GB2312。<br />
<br />
基本上您只要建立MultipartRequest物件就完成了档案上传的处理动作，如果要额外取得档案资讯，您可以从 MultipartRequest物件取得，例如getFileNames()、getContentType()、getFile()等等， getFileNames()所取得的是Enumeration型态之物件，可以这么使用：<br />
</small>
<div style="margin-left: 40px"><small><span style="font-weight: bold; font-family: Courier New,Courier,monospace">Enumeration filenames = multi.getFileNames(); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">while(filenames.hasMoreElements()) { </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp; String filename = (String) filenames.nextElement(); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp; out.println("上传了档案" + filename + "&lt;br&gt;"); </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace" />
<span style="font-weight: bold; font-family: Courier New,Courier,monospace">} </span><br />
</small></div>
<small>&nbsp;<br />
其它有关于MultipartRequest的说明，您可以参考下载的zip档中之api说明。 </small><br />
<img src ="http://www.blogjava.net/doodoosun/aggbug/209381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-06-20 11:23 <a href="http://www.blogjava.net/doodoosun/articles/209381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclispe 内存不足解决方法</title><link>http://www.blogjava.net/doodoosun/articles/209058.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Thu, 19 Jun 2008 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/209058.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/209058.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/209058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/209058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/209058.html</trackback:ping><description><![CDATA[<p>前一段时间在Eclipse中调试工程的时候，会报出内存不足，然后可以取消但是几次之后Eclipse就会死在哪里，不得不结束重启。曾经从资料上看到，可能是Eclipse的自动构建导致消耗了内存，但是取消自动构建后每次调试的时候不得不手工构建，有时候忘记了就会导致调试不出结果。今天又学到了一招，怎么解决。<br />
&nbsp;<br />
可以增大java虚拟机内存，在Eclipse的安装目录有Eclipse的配置文件eclipse.ini，修改它就可以了<br />
-vmargs<br />
-Xms40m<br />
-Xmx400m<br />
其中-vmargs指这个参数是用于java的虚拟机(virtual machine)的，-Xms表示最小值，-Xmx表示最大值，可以根据机器的具体情况设置最大值。<br />
&nbsp;<br />
除了修改配置文件的办法之外，还可以通过设置启动参数的办法，新建一个Eclipse快捷方式，在快捷方式属性的目标框中后添加：-vmargs -Xmx300M -XX:MaxPermSize=256M<br />
-Xmx400M 表示将eclipse分配的内存从默认的256M增加到400M<br />
-XX:MaxPermSize=256M 表示将eclipse长期保持的内存由默认的64M增加到256M<br />
注意：上面两个数字的差必须大于-Xmx数值的5%。&nbsp;<br />
&nbsp;<br />
2.<br />
<br />
</p>
<p>打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java，再双击Installed JREs，在右边选择前面有对勾的JRE，再单击右边的&#8220;Edit&#8221;按钮，<br />
出现一个 Edit JRE 的对话框，在其中的Default VM Arguments: 框中输入 -Xms128m -Xmx512m ,这样设置Java拟虚机内存使用最小是128M，最大是512M，再单击&#8220;OK&#8221;关闭 Edit JRE 对话框，再单击&#8220;OK&#8221;关闭 Preferences对话框，Eclipse一下子就运行快了起来，呵~<br />
或者是<br />
可以在eclipse.ini文件中将默认设置改为-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M或者更大，这要看你自己机器的内存配置而定，如果这样解决不了就右击eclipse快捷方式，在属性---快捷方式标签下---目标中输入E:\eclipse-SDK-3.2RC7-win32\eclipse\eclipse.exe -clean -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M其中E:\eclipse-SDK-3.2RC7-win32\eclipse\eclipse.exe是我的eclipse的位置，就可以了</p>
<p>再一种情况就是看看电脑是不是安装了什么恶意插件！把它们都清楚掉就可以了！<br />
</p>
<p><br />
3.内存插件<br />
<br />
eclipse加速插件keepresident &nbsp; http://suif.stanford.edu/pub/keepresident&nbsp; </p>
<p>.eclipse加速插件keepresident &nbsp; http://suif.stanford.edu/pub/keepresident&nbsp; 如果你的machine内存少于700m,那么该插件实在能让你的eclipse快起来,不再像以前那样,动不动就僵住了.&nbsp; 其原理是利用两个 windows api - setprocessworkingsetsize 与 virtuallock,实得windows操作系统尽量不把&nbsp; java进程的内存pageout到硬盘,多hold住一些物理内存给java进程使用.这样当java process定期垃圾回收时就&nbsp; 不会表现得僵住了.</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/209058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-06-19 09:06 <a href="http://www.blogjava.net/doodoosun/articles/209058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>i18国际化的研究和proerties 文件的</title><link>http://www.blogjava.net/doodoosun/articles/208954.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Wed, 18 Jun 2008 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/208954.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/208954.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/208954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/208954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/208954.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java Properties 类读取配置文件信息&nbsp; http://blog.csdn.net/DL88250/archive/2008/02/19/2104561.aspx在我们平时写程序的时候，有些参数是经常改变的，而这种改变不是我们预知的。比如说我们开发了一个操作数据库的模块，在开发的时候我们连接本地的数据库那么 IP ，数据库名称，表名称，数据库主机等信息是我们本地的，要...&nbsp;&nbsp;<a href='http://www.blogjava.net/doodoosun/articles/208954.html'>阅读全文</a><img src ="http://www.blogjava.net/doodoosun/aggbug/208954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-06-18 18:14 <a href="http://www.blogjava.net/doodoosun/articles/208954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>google svn 服务器使用</title><link>http://www.blogjava.net/doodoosun/articles/207368.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Thu, 12 Jun 2008 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/207368.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/207368.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/207368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/207368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/207368.html</trackback:ping><description><![CDATA[google svn 服务器使用：<br />
&nbsp;&nbsp;&nbsp; 1. http://code.google.com/ 用gmail登入。&gt;后点击&gt;<strong><a href="http://code.google.com/hosting/">Project Hosting</a></strong><br />
&nbsp;&nbsp;&nbsp; 2. 进入&gt;&gt; http://code.google.com/hosting/&nbsp; &gt;后点击&gt;<a href="http://code.google.com/hosting/createProject">Create a new project</a><br />
&nbsp;&nbsp;&nbsp; 3. 填入必要的项目名，描述等确定。就可以了<br />
&nbsp;&nbsp;&nbsp; 4. 确定成功后 -&gt;<a onclick="cancelBubble=true;" href="http://code.google.com/p/myturtleswims/source/checkout">Source</a><br />
&nbsp;&nbsp;&nbsp; 5. 到eclipse的打开新建一个project-&gt;team-&gt;share Project-&gt;svn<br />
&nbsp;&nbsp;&nbsp; 6. 后面根据 google source 上的svn提示，这我就不多说了。一般的svn http url <br />
<br />
<br />
svn 在eclipse 的配置：<br />
打开eclipse <br />
1.点击help-&gt; <br />
2.Software Updates-&gt; <br />
3.Find and Install-&gt; <br />
4.Search for new feature to install -&gt; <br />
5.New Remote Site-&gt; <br />
6.Name:SubEclipse,URL:http://subclipse.tigris.org/update<br />
7.确定-&gt; <br />
8.选择SubEclipse-&gt; <br />
9.finish-&gt; <br />
10.等待读取下载文件列表 <br />
11.选择subeclipse <br />
12.next <br />
13.I accept the .....next <br />
14.finish <br />
15.开始下载,漫长的等待过程... <br />
16.Install al <br />
17.安装完成后会提示是否重新启动eclipse,点击Yes <br />
<img src ="http://www.blogjava.net/doodoosun/aggbug/207368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-06-12 14:04 <a href="http://www.blogjava.net/doodoosun/articles/207368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个转义符的问题(转)</title><link>http://www.blogjava.net/doodoosun/articles/206036.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Thu, 05 Jun 2008 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/206036.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/206036.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/206036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/206036.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/206036.html</trackback:ping><description><![CDATA[<p>想把一个字符串中所有的"\"转换成"/",即把Windows格式的转换成Unix格式.<br />
于是用到String.replaceAll(String regex, String replacement)这个方法.<br />
如果用path = path.replaceAll("\\", "/"); 会报错,为什么呢?<br />
&nbsp;<br />
在字符串里面,\是转义符.<br />
在正则表达式里面,\也是转义符.<br />
&nbsp;<br />
replaceAll的第一个参数是一个正则表达式里,想得到正则表达式中的\,就必须用"\\\\".<br />
即,用\\来得到字符串中的\,用\\\\即可得到正则表达式中的\.<br />
&nbsp;<br />
困扰了几分钟,被钟普一语点破.</p>
<br />
在java中要将一个字符串的中$符号去除。我是这样写的：<br />
String tmp = "-$125402.00";<br />
tmp.replaceAll("$","");<br />
可是执行去来的结果并没有把$去除。后来找资料才发现要这样写<br />
tmp.replaceAll("<a href="file://$/">\\$</a>","")才可以。 <br />
<br />
<br />
<p>public class test {<br />
public static void main(String[] args) {<br />
String str=&#8221;F[ACE=color]dddddddddddddd[/FACE]&#8220;;<br />
str=str.replaceAll(&#8221;[&#8221;,&#8221;&lt;&#8221;);<br />
System.out.print(str);<br />
}<br />
}<br />
就在那个&#8221;[&#8221;这里出现错啦！<br />
java.util.regex.PatternSyntaxException: Unclosed character class near<br />
index 0<br />
————————————————————————————————<br />
String的replaceAll方法，第一个参数使用的是正则式表达方法。详细可看JDK文档。<br />
上例改为replaceAll(&#8221;\\Q[\\E&#8221;,&#8221;&lt;&#8221;);<br />
<br />
</p>
<p>public class PathTrackle</p>
<p>{<br />
&nbsp;public static String&nbsp; existPathTrackle(String path){<br />
&nbsp; String&nbsp; tempString = path.replaceAll("\\\\", "/");<br />
&nbsp; String returnString = tempString.replaceAll("/+|", "/");<br />
&nbsp; return returnString;<br />
&nbsp;}<br />
&nbsp; <br />
&nbsp; public static void main(String args[]){<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; String a="ab/cd/";<br />
&nbsp;&nbsp;&nbsp; String b="\\\\\\dawson\\\\";<br />
&nbsp;&nbsp;&nbsp; String c="/////////////c/d//ab//kk//";<br />
&nbsp;&nbsp;&nbsp; System.out.println(existPathTrackle(c));<br />
&nbsp; }</p>
<p>}</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/206036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-06-05 14:02 <a href="http://www.blogjava.net/doodoosun/articles/206036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可变参数的用法</title><link>http://www.blogjava.net/doodoosun/articles/204075.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Fri, 30 May 2008 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/204075.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/204075.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/204075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/204075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/204075.html</trackback:ping><description><![CDATA[<p>package basic;</p>
<p><br />
public class TestVariableArg<br />
{</p>
<p>&nbsp; /**<br />
&nbsp;&nbsp; * @param args<br />
&nbsp;&nbsp; */<br />
&nbsp; <br />
&nbsp; public static String executeToW3CNodeArray (String query, Object... objectarray){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("executeToW3CNodeArray "); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("objectarray "+objectarray.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return query;<br />
&nbsp; }<br />
&nbsp; public static void main(String[] args)<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp; Object a=(Object)"string ";<br />
&nbsp;&nbsp;&nbsp; System.out.println(executeToW3CNodeArray("Tapestry in Action"));</p>
<p>&nbsp; }</p>
<p>}</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/204075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-05-30 14:01 <a href="http://www.blogjava.net/doodoosun/articles/204075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java国际化——资源包的使用和构建</title><link>http://www.blogjava.net/doodoosun/articles/203006.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Mon, 26 May 2008 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/203006.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/203006.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/203006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/203006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/203006.html</trackback:ping><description><![CDATA[<p>参考：<br />
1.http://stonexu.spaces.live.com/blog/cns!a02fa9ddd3c7b8cc!115.entry <br />
2.http://blog.163.com/quentin_wjb/blog/static/4726976120083842920<br />
http://blog.donews.com/apalong/archive/2005/08/25/526269.aspx<br />
</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/203006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-05-26 18:19 <a href="http://www.blogjava.net/doodoosun/articles/203006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java反编译工具 Eclipse插件--Jode Decompiler</title><link>http://www.blogjava.net/doodoosun/articles/135177.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Fri, 09 May 2008 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/135177.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/135177.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/135177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/135177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/135177.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td><font size="2">大家也许用过其他的反编译工具，比如</font><a href="http://www.ksafe.net/kpdus.tripod.com/jad.html"><font color="#0000ff" size="2"><u>jad</u></font></a><font size="2">，或者是集成的</font><a href="http://members.fortunecity.com/neshkov/dj.html"><font color="#0000ff" size="2"><u>DJ Java Decompiler</u></font></a><font size="2">，</font><a href="http://www.ksafe.net/kpdus.tripod.com/jad.html"><font color="#0000ff" size="2"><u>jad</u></font></a><font size="2">可能用起来比较麻烦，但是</font><a href="http://members.fortunecity.com/neshkov/dj.html"><font color="#0000ff" size="2"><u>DJ Java Decompiler</u></font></a><font size="2">还是蛮好用的。<br />
            这里我就不说他们了，有空你们可以自己去down一个来玩玩。<br />
            我是非常喜欢用Eclipse的啦，在这里我就来说说基于Eclipse的Java反编译插件，也许有人用过</font><a href="http://jadclipse.sourceforge.net/"><font color="#800080" size="2"><u>Jadclipse</u></font></a><font size="2">,确实很不错的，但是在这里我也不说它了，<br />
            我现在要说的是</font><a href="http://blog.technoetic.com/2005/08/18/new-release-of-jode-eclipse-plugin/"><font color="#0000ff" size="2"><u>Jode Decompiler</u></font></a><font size="2">. <br />
            安装非常的简单，help =&gt; Software Updates =&gt; Find and Install... =&gt; Search for new features to install,单击"New Remote Site..."<br />
            &nbsp;在URL栏输入 </font><a href="http://www.technoetic.com/eclipse/update"><font color="#0000ff" size="2"><u>http://www.technoetic.com/eclipse/update</u></font></a><font size="2">然后下一步，就可以看到&#8220;jode decompiler plugin *.*&#8221;了，选上安装就可以了，<br />
            由于Jode Decompiler是纯Java编写的所以也不需要其他的什么组件来支持了，安装好了可以看到Window =&gt; Preferences... =&gt; Java =&gt; Jode Decompiler选项卡。<br />
            安装好了再设置一下文件关联就可以了，Window =&gt; Preferences... =&gt; General =&gt; Editors =&gt; File Associations找到"*.class"在"Associated editors"里面可以看到<br />
            "Jode class file viewer"选中它再单击Default按钮就OK了.<br />
            &nbsp;现在就可以开始使用了,建立一个project然后引用你的组件,在组件中找到你所要反编译的类文件打开就可以看到反编译后得到的代码了.看到Eclipse显示出来的反编译代码简直就是一种享受,用DJ Java Decompiler反编译出来的代码也有关键字高亮等的功能,但是总没Eclipse的看起来爽吧.嘿嘿......</font> </td>
        </tr>
    </tbody>
</table>
<br />
<br />
eclipse 3.3 不能用该工具<br />
可以用jad for eclipse 3.3&nbsp; 的工具<br />
<br />
jad是java的反编译工具，是命令行执行，反编译出来的源文件可读性较高。可惜用起来不太方便。还好
<p>&nbsp;&nbsp;&nbsp; 找到eclipse下的插件，叫jadclipse，安装好之后，只要双击。class文件，就能直接看源文件，包括jar</p>
<p>&nbsp;&nbsp;&nbsp; 包中的class文件，也可以直接反编译。</p>
<p>&nbsp;&nbsp;&nbsp; 1.<a class="channel_keylink" href="http://download.chinaitlab.com/" target="_blank">下载</a><a href="http://www.kpdus.com/jad.html#download"><u><font color="#0000ff">http://www.kpdus.com/jad.html#download</font></u></a><a class="channel_keylink" href="http://download.chinaitlab.com/" target="_blank">下载</a>后解压。解压缩后将jad.exe拷贝到JRE的bin目录下，如\<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>\jre1.5.0_06\bin</p>
<p>&nbsp;&nbsp;&nbsp; 2.<a class="channel_keylink" href="http://download.chinaitlab.com/" target="_blank">下载</a> jadclipse_3.3.jar</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://jaist.dl.sourceforge.net/sourceforge/jadclipse/net.sf.jadclipse_3.3.0.jar"><font color="#336699">http://jaist.dl.sourceforge.net/sourceforge/jadclipse/net.sf.jadclipse_3.3.0.jar</font></a>将jadclipse_3.1.0.jar复制到D：\Program Files\eclipse\myplugin\eclipse\plugins目录下（用的是</p>
<p>&nbsp;&nbsp;&nbsp; link方式安装插件的）。</p>
<p>&nbsp;&nbsp;&nbsp; 3.启动Eclipse后，在<a class="channel_keylink" href="http://windows.chinaitlab.com/" target="_blank">Windows</a>——&gt;Perference——&gt;<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>下面应该会多出一个JadClipse目录，相关的设置可</p>
<p>&nbsp;&nbsp;&nbsp; 以在此修改配置jadclipse：设置path to decompiler为jad.exe的全路径，如：F：\Java\jre1.5.0_06\bin\jad.exe</p>
<p>&nbsp;&nbsp;&nbsp; ，在Directory for temporary files中指定临时文件的路径，如：G：\Java\eclipse-SDK-3.0-win32\temp 4、在Eclipse的<a class="channel_keylink" href="http://windows.chinaitlab.com/" target="_blank">Windows</a>——&gt;Perference——&gt;General-&gt;Editors-&gt;File Associations中修改&#8220;*.class&#8221;默</p>
<p>&nbsp;&nbsp;&nbsp; 认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;</p>
<img src ="http://www.blogjava.net/doodoosun/aggbug/135177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-05-09 16:46 <a href="http://www.blogjava.net/doodoosun/articles/135177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>