⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java 程序中的多线程——看一看开发和使用线程是多么容易.htm

📁 java的Java书籍JAVA多线程!请大家看看!!有学习的价值!!!xieixe
💻 HTM
📖 第 1 页 / 共 4 页
字号:
            id=5 name=5></A>
            <P><STRONG 
            class=subhead>调试线程化的程序</STRONG><BR>在线程化的程序中,可能发生的某些常见而讨厌的情况是死锁、活锁、内存损坏和资源耗尽。</P>
            <P><B>死锁</B><BR>死锁可能是多线程程序最常见的问题。当一个线程需要一个资源而另一个线程持有该资源的锁时,就会发生死锁。这种情况通常很难检测。但是,解决方案却相当好:在所有的线程中按相同的次序获取所有资源锁。例如,如果有四个资源 
            —A、B、C 和 D — 并且一个线程可能要获取四个资源中任何一个资源的锁,则请确保在获取对 B 的锁之前首先获取对 A 
            的锁,依此类推。如果“线程 1”希望获取对 B 和 C 的锁,而“线程 2”获取了 A、C 和 D 
            的锁,则这一技术可能导致阻塞,但它永远不会在这四个锁上造成死锁。</P>
            <P><B>活锁</B><BR>当一个线程忙于接受新任务以致它永远没有机会完成任何任务时,就会发生活锁。这个线程最终将超出缓冲区并导致程序崩溃。试想一个秘书需要录入一封信,但她一直在忙于接电话,所以这封信永远不会被录入。</P>
            <P><B>内存损坏</B><BR>如果明智地使用 <TT>synchronized</TT> 
            关键字,则完全可以避免内存错误这种气死人的问题。</P>
            <P><B>资源耗尽</B><BR>某些系统资源是有限的,如文件描述符。多线程程序可能耗尽资源,因为每个线程都可能希望有一个这样的资源。如果线程数相当大,或者某个资源的侯选线程数远远超过了可用的资源数,则最好使用<I> 
            资源池</I>。一个最好的示例是数据库连接池。只要线程需要使用一个数据库连接,它就从池中取出一个,使用以后再将它返回池中。资源池也称为<I> 
            资源库</I>。</P><A id=6 name=6></A>
            <P><STRONG 
            class=subhead>调试大量的线程</STRONG><BR>有时一个程序因为有大量的线程在运行而极难调试。在这种情况下,下面的这个类可能会派上用场:</P>
            <TABLE class=code-sample cellPadding=0 width="98%" border=0>
              <TBODY>
              <TR>
                <TD><PRE>public class Probe extends Thread {
    public Probe() {}
    public void run() {

        while(true) {
            Thread[] x = new Thread[100];
            Thread.enumerate(x);

            for(int i=0; i&lt;100; i++) {
            Thread t = x[i];
            if(t == null)
                break;
            else
                System.out.println(t.getName() + "\t" + t.getPriority()
                + "\t" + t.isAlive() + "\t" + t.isDaemon());
            }
        }
    }
}
</PRE></TD></TR></TBODY></TABLE><BR><BR><A id=7 name=7></A>
            <P><STRONG class=subhead>限制线程优先级和调度</STRONG><BR>Java 
            线程模型涉及可以动态更改的线程优先级。本质上,线程的优先级是从 1 到 10 之间的一个数字,数字越大表明任务越紧急。JVM 
            标准首先调用优先级较高的线程,然后才调用优先级较低的线程。但是,该标准对具有相同优先级的线程的处理是随机的。如何处理这些线程取决于基层的操作系统策略。在某些情况下,优先级相同的线程分时运行;在另一些情况下,线程将一直运行到结束。请记住,Java 
            支持 10 
            个优先级,基层操作系统支持的优先级可能要少得多,这样会造成一些混乱。因此,只能将优先级作为一种很粗略的工具使用。最后的控制可以通过明智地使用 
            <TT>yield()</TT> 函数来完成。通常情况下,请不要依靠线程优先级来控制线程的状态。</P><A id=8 
            name=8></A>
            <P><STRONG class=subhead>小结</STRONG><BR>本文说明了在 Java 
            程序中如何使用线程。像是否<I>应该</I>使用线程这样的更重要的问题在很大程序上取决于手头的应用程序。决定是否在应用程序中使用多线程的一种方法是,估计可以并行运行的代码量。并记住以下几点:</P>
            <UL>
              <LI>使用多线程不会增加 CPU 的能力。但是如果使用 JVM 的本地线程实现,则不同的线程可以在不同的处理器上同时运行(在多 
              CPU 的机器中),从而使多 CPU 机器得到充分利用。 
              <LI>如果应用程序是计算密集型的,并受 CPU 功能的制约,则只有多 CPU 机器能够从更多的线程中受益。 
              <LI>当应用程序必须等待缓慢的资源(如网络连接或数据库连接)时,或者当应用程序是非交互式的时,多线程通常是有利的。 
</LI></UL>
            <P>基于 Internet 
            的软件有必要是多线程的;否则,用户将感觉应用程序反映迟钝。例如,当开发要支持大量客户机的服务器时,多线程可以使编程较为容易。在这种情况下,每个线程可以为不同的客户或客户组服务,从而缩短了响应时间。</P>
            <P>某些程序员可能在 C 
            和其他语言中使用过线程,在那些语言中对线程没有语言支持。这些程序员可能通常都被搞得对线程失去了信心。</P><A 
            id=resources name=resources></A>
            <P><STRONG class=subhead>参考资料</STRONG></P>
            <UL>
              <LI>请阅读 Scott Oaks 和 Henry Wong 所著的<A 
              href="http://www.oreilly.com/catalog/jthreads2/">《Java 
              Threads》</A>,以了解如何充分利用 Java 的线程功能。 
              <LI>查找有关 Thread 类和 <A 
              href="http://java.sun.com/products/jdk/1.2/docs/api/index.html">Java 
              2 平台,标准版,API 规范</A>的其他方面的信息。 </LI></UL><A id=author name=author></A>
            <P><STRONG class=subhead>作者简介</STRONG><BR>Neel V. Kumar 
            是一位软件工程师,他有八年的面向对象编程经验,所使用的语言为 C++ 和 Java 编程语言。他出生于 Iowa,目前住在加利福尼亚的 
            Menlo Park,刚刚涉足电信领域。以前他对许多项目提供过咨询服务,乐意与他人分享他的知识。可以通过 <A 
            href="mailto:neelvk@terway.com">neelvk@terway.com</A> 与他联系。</P><!-- End paper --><BR></TD>
          <TD vAlign=top width=8><!-- gutter--><IMG height=1 alt="" 
            src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=8></TD></TR><!-- gutter -->
        <TR vAlign=top height=8>
          <TD vAlign=top width=8><!-- gutter --></TD>
          <TD vAlign=top width=8><!-- gutter --></TD>
          <TD vAlign=top width=8><!-- gutter --></TD></TR>
        <TR vAlign=top height=8>
          <TD vAlign=top width=8><!-- gutter --></TD>
          <TD vAlign=top width=8><!-- rate article form -->
            <TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
              <TBODY>
              <TR>
                <TD width="100%" height=1><SPACER type="block" height="1" 
              /></TD></TR>
              <TR>
                <TD width="100%" bgColor=#cc6633 height=3><IMG height=3 alt="" 
                  src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#333333 height=1><IMG height=1 alt="" 
                  src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#000000 height=1><IMG height=1 alt="" 
                  src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#ffffff height=5><IMG height=5 alt="" 
                  src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR vAlign=top>
                <TD>
                  <FORM 
                  action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument 
                  method=post><!-- paste title here --><INPUT type=hidden 
                  value="Multi-threading in Java programs" name=ArticleTitle> <!-- paste zone here --><INPUT type=hidden value=java 
                  name=Zone> <INPUT type=hidden 
                  value=/developerWorks/cn/thankyou/feedback-java.html 
                  name=RedirectURL> <FONT face="HELVETICA, HELV, ARIAL" 
                  size=-1><B>您对这篇文章的看法如何?</B></FONT> 
                  <P></P>
                  <TABLE cellSpacing=0 cellPadding=0 width=570 border=0>
                    <TBODY>
                    <TR vAlign=top>
                      <TD><INPUT type=radio value=5 name=Rating><FONT 
                        face="HELVETICA, HELV, ARIAL" size=-1>真棒!</FONT></TD>
                      <TD><INPUT type=radio value=4 name=Rating><FONT 
                        face="HELVETICA, HELV, ARIAL" size=-1>好文章</FONT></TD>
                      <TD><INPUT type=radio value=3 name=Rating><FONT 
                        face="HELVETICA, HELV, ARIAL" size=-1>一般;尚可</FONT></TD>
                      <TD><INPUT type=radio value=2 name=Rating><FONT 
                        face="HELVETICA, HELV, ARIAL" size=-1>需提高</FONT></TD>
                      <TD><INPUT type=radio value=1 name=Rating><FONT 
                        face="HELVETICA, HELV, ARIAL" 
                    size=-1>太差!</FONT></TD></TR></TBODY></TABLE><BR><FONT 
                  face="HELVETICA, HELV, ARIAL" size=-1><B>建议?</B></FONT><BR><TEXTAREA name=comments rows=3 wrap=virtual cols=52></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR></TBODY></TABLE><!-- end rate article form --></TD>
          <TD vAlign=top width=8><!--gutter--></TD></TR>
        <TR vAlign=top height=8>
          <TD vAlign=top width=8><!--gutter--></TD>
          <TD vAlign=top width=8><!--gutter--></TD>
          <TD vAlign=top width=8><!--gutter--></TD></TR></TBODY></TABLE><!-- end content --></TD></TR></TBODY></TABLE><!-- ---------------footer------------------- -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD align=right width="100%" colSpan=2 height=30>(c) Copyright IBM Corp. 
      2001, (c) Copyright IBM China 2001, All Right Reserved</TD></TR>
  <TR>
    <TD width=150>
      <TABLE cellSpacing=0 cellPadding=0 width=150 border=0>
        <TBODY>
        <TR bgColor=#000000>
          <TD align=middle width=49><A class=nav style="COLOR: #ffffff" 
            href="http://www.ibm.com/privacy/"><FONT face="Arial, sans-serif" 
            color=#ffffff size=-1>隐私</FONT></A></TD>
          <TD width=1 bgColor=#959595><IMG height=20 alt="" 
            src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=1 border=0></TD>
          <TD align=middle width=49><A class=nav style="COLOR: #ffffff" 
            href="http://www.ibm.com/legal/"><FONT face="Arial, sans-serif" 
            color=#ffffff size=-1>法律</FONT></A></TD>
          <TD width=1 bgColor=#959595><IMG height=20 alt="" 
            src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=1 border=0></TD>
          <TD align=middle width=49><A class=nav style="COLOR: #ffffff" 
            href="http://www.cn.ibm.com/Main.nsf/HTMLS/aboutibm&amp;contactus"><FONT 
            face="Arial, sans-serif" color=#ffffff size=-1>联系</FONT></A></TD>
          <TD width=1 bgColor=#959595><IMG height=21 alt="" 
            src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=1 
        border=0></TD></TR></TBODY></TABLE></TD>
    <TD width="100%" bgColor=#000000><IMG height=1 alt="" 
      src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/c.gif" width=1 
  border=0></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 
src="Java 程序中的多线程——看一看开发和使用线程是多么容易.files/stats.js" 
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt="" 
src="D:\专业\JAVA\J2SE\Java 程序中的多线程——看一看开发和使用线程是多么容易.files\c(1).gif" width=1 
border=0></NOSCRIPT> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -