﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-璀璨空间</title><link>http://www.blogjava.net/yuanzicong/</link><description>心随风动</description><language>zh-cn</language><lastBuildDate>Sat, 20 Jun 2026 01:52:58 GMT</lastBuildDate><pubDate>Sat, 20 Jun 2026 01:52:58 GMT</pubDate><ttl>60</ttl><item><title>线程方法备忘</title><link>http://www.blogjava.net/yuanzicong/articles/264316.html</link><dc:creator>楚之君</dc:creator><author>楚之君</author><pubDate>Tue, 07 Apr 2009 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/yuanzicong/articles/264316.html</guid><wfw:comment>http://www.blogjava.net/yuanzicong/comments/264316.html</wfw:comment><comments>http://www.blogjava.net/yuanzicong/articles/264316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuanzicong/comments/commentRss/264316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuanzicong/services/trackbacks/264316.html</trackback:ping><description><![CDATA[<div align="left">
<pre style="text-indent: 2em">两个概念</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">线程：一组指令序列。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">线程对象：能产生线程的对象，在Java中有Runnable接口及Thread类。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">方法说明</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">join:</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">在线程对象a上调用join()方法，就是让当前正在执行的线程等待线程对象a所对应的线程运行完成才继续运行。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">start:</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">通过Thread实例的start()，一个Thread实例只能产生一个线程。start()方法最本质的功能是从CPU中申请另一个线程空间来执行run()方法中的代码。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">interrupt()、interrupted()和isInterrupted()三个方法对比解读。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">interrupt：</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">线程对象调用了interrupt()方法后，它对象的线程并没有中断，只是改变它的状态为中断状态，在没有其它影响的情况下，线程继续执行。注：只有当线程执行到sleep()、wait()、join()等方法时，或者程序检查中断状态的情况下，线程才会抛出异常而中断。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">interrupted：</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">与interrupt()方法对应，interrupted()方法将当前线程状态改变为非中断状态，如果当前线程调用interrupted()方法之前的状态为中断状态，则返回true，否则为false。与interrupt()方法不同的是：interrupted()是static方法，interrupt()是线程对象方法。</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">isInterrupted：</pre>
</div>
<div align="left">
<pre style="text-indent: 2em">isInterrupted()方法则仅仅是检查线程对象对应的线程是否是中断状态，并不改变线程状态。</pre>
</div>
  <img src ="http://www.blogjava.net/yuanzicong/aggbug/264316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuanzicong/" target="_blank">楚之君</a> 2009-04-07 20:12 <a href="http://www.blogjava.net/yuanzicong/articles/264316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>垃圾回收机制</title><link>http://www.blogjava.net/yuanzicong/articles/264315.html</link><dc:creator>楚之君</dc:creator><author>楚之君</author><pubDate>Tue, 07 Apr 2009 12:09:00 GMT</pubDate><guid>http://www.blogjava.net/yuanzicong/articles/264315.html</guid><wfw:comment>http://www.blogjava.net/yuanzicong/comments/264315.html</wfw:comment><comments>http://www.blogjava.net/yuanzicong/articles/264315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuanzicong/comments/commentRss/264315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuanzicong/services/trackbacks/264315.html</trackback:ping><description><![CDATA[<p>垃圾回收策略：<br />
</p>
<p>1、引用计数，当对象引用为0时可删除；</p>
<p>&nbsp;</p>
<p>2、对象引用遍历，GC删除不可到达的对象。<br />
<br />
</p>
<p>&nbsp;垃圾回收机制：<br />
</p>
<p>1、标记清除收集器</p>
<p>&nbsp;&nbsp;&nbsp; 标记遍历可到达的对象，删除未标记对象并压缩。</p>
<p>&nbsp;</p>
<p>2、标记压缩收集器</p>
<p>&nbsp;&nbsp;&nbsp; 标记遍历可到达的对象，将标记对象复制到堆栈新域以便压缩。</p>
<p>&nbsp;</p>
<p>3、复制收集器</p>
<p>&nbsp;&nbsp;&nbsp; 将堆栈分为两个域，常称为半空间。每次仅使用一半的空间，jvm生成的新对象则放在另一半空间中。gc运行时，将可到达对象复制到另一半空间，从而压缩了堆栈。这种方法适用于短生存期的对象，持续复制长生存期的对象则导致效率降低。</p>
<p>&nbsp;</p>
<p>4、增量收集器</p>
<p>&nbsp;&nbsp;&nbsp; 增量收集器把堆栈分为多个域，每次仅从一个域收集垃圾。这会造成较小的应用程序中断。</p>
<p><br />
5、分代收集器<br />
<br />
　　把堆栈分为两个或多个域，用以存放不同寿命的对象。jvm生成的新对象一般放在其中的某个域中。过一段时间，继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。</p>
<p>&nbsp;</p>
<p>6、并发收集器<br />
<br />
　　并发收集器与应用程序同时运行。在某点上（如压缩时）一般停止其他操作以完成特定的任务，但是因为其他应用程序可进行其他的后台操作，所以中断其他处理的实际时间大大降低。</p>
<p><br />
7、并行收集器<br />
<br />
　　并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性。<br />
</p> <img src ="http://www.blogjava.net/yuanzicong/aggbug/264315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuanzicong/" target="_blank">楚之君</a> 2009-04-07 20:09 <a href="http://www.blogjava.net/yuanzicong/articles/264315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>