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

📄 编写多线程的 java 应用程序——如何避免当前编程中最常见的问题.htm

📁 java的Java书籍JAVA多线程!请大家看看!!有学习的价值!!!xieixe
💻 HTM
📖 第 1 页 / 共 4 页
字号:
            方法,使处理器放弃它当前拥有的对象的锁。如果对象在方法级别上使同步的,这种方法能够很好的工作。因为它仅仅使用了一个锁。如果它使用 
            fine-grained 锁,则 <CODE>wait()</CODE> 将无法放弃这些锁。此外,一个因为调用 
            <CODE>wait()</CODE> 方法而阻塞的线程,只有当其他线程调用 <CODE>notifyAll()</CODE> 
            时才会被唤醒。</FONT></P>
            <P><FONT face="Arial, sans-serif" size=-1><A id=7 name=7></A><B 
            class=subhead>线程和 AWT/Swing</B><BR>在那些使用 Swing 和/或 AWT 包创建 GUI 
            (用户图形界面)的 Java 程序中,AWT 事件句柄在它自己的线程中运行。开发员必须注意避免将这些 GUI 
            线程与较耗时间的计算工作绑在一起,因为这些线程必须负责处理用户时间并重绘用户图形界面。换句话来说,一旦 GUI 
            线程处于繁忙,整个程序看起来就象无响应状态。Swing 线程通过调用合适方法,通知那些 Swing callback (例如 Mouse 
            Listener 和 Action Listener )。 这种方法意味着 listener 无论要做多少事情,都应当利用 
            listener callback 方法产生其他线程来完成此项工作。目的便在于让 listener callback 
            更快速返回,从而允许 Swing 线程响应其他事件。</FONT></P>
            <P><FONT face="Arial, sans-serif" size=-1>如果一个 Swing 
            线程不能够同步运行、响应事件并重绘输出,那怎么能够让其他的线程安全地修改 Swing 的状态?正如上面提到的,Swing 
            callback 在 Swing 线程中运行。因此他们能修改 Swing 数据并绘到屏幕上。</FONT></P>
            <P><FONT face="Arial, sans-serif" size=-1>但是如果不是 Swing callback 
            产生的变化该怎么办呢?使用一个非 Swing 线程来修改 Swing 数据是不安全的。Swing 
            提供了两个方法来解决这个问题:<CODE>invokeLater()</CODE> 和 
            <CODE>invokeAndWait()</CODE>。为了修改 Swing 状态,只要简单地调用其中一个方法,让 
            <CODE>Runnable</CODE> 的对象来做这些工作。因为 <CODE>Runnable</CODE> 
            对象通常就是它们自身的线程,你可能会认为这些对象会作为线程来执行。但那样做其实也是不安全的。事实上,Swing 
            会将这些对象放到队列中,并在将来某个时刻执行它的 run 方法。这样才能够安全修改 Swing 状态。</FONT></P>
            <P><FONT face="Arial, sans-serif" size=-1><A id=8 name=8></A><B 
            class=subhead>总结</B><BR>Java 语言的设计,使得多线程对几乎所有的 Applet 都是必要的。特别是,IO 和 
            GUI 
            编程都需要多线程来为用户提供完美的体验。如果依照本文所提到的若干基本规则,并在开始编程前仔细设计系统——包括它对共享资源的访问等,你就可以避免许多常见和难以发觉的线程陷阱。</FONT></P><!-- END CONTENT AREA SIDEBAR --><!-- Enter list of article resources here --><FONT 
            face="Arial, sans-serif" size=-1><A id=resources 
            name=resources></A></FONT>
            <P><B class=subhead>资料</B></P>
            <UL>
              <LI>参考 Java 2 平台上的 API 规范说明书(1.3 版标准):<A 
              href="http://java.sun.com/j2se/1.3/docs/api/index.html">Java 2 API 
              文档</A>. 
              <LI>更多关于 JVM 对线程和上锁处理的信息,可以参阅 <A 
              href="http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html">Java 
              虚拟机规范说明书</A>. 
              <LI>Allen Holub 的 <A 
              href="http://www.amazon.com/exec/obidos/ASIN/1893115100/qid=982189791/sr=1-3/ref=sc_b_3/103-1584714-9195066"><I>Taming 
              Java Threads</I></A> (APress, June 2000) 是一本极好的参考书 
              <LI>你可能还希望阅读 Allen 的文章 <A 
              href="http://www-900.ibm.com/developerWorks/cn/java/j-king/index.shtml">如果我是国王:关于解决 
              Java 编程语言线程问题的建议</A> (developerWorks, October 2000), 
              里面阐述了一些被他称为“一门伟大语言最虚弱之处”的问题。 </LI></UL><!-- Enter author bios here; make author heading singular or plural as needed --><A 
            id=author1 name=author1></A>
            <P><B class=subhead>关于作者</B><BR><!-- <img src="[author.jpg]" border="0" width="64" height="71" align="left" alt=""> -->Alex 
            Roetter 已经有数年关于用 Java 以及其他编程语言编写多线程应用程序的经验,在斯坦福大学获得了计算机科学学士学位。你可以通过 
            <A 
            href="mailto:aroetter@CS.Stanford.edu">aroetter@CS.Stanford.edu</A> 
            与 Alex 联系。</P><BR clear=all><IMG height=5 alt="" 
            src="编写多线程的 Java 应用程序——如何避免当前编程中最常见的问题.files/c.gif" width=100 
            border=0><BR><!-- END PAPER BODY --><BR></TD>
          <TD vAlign=top width=5><!-- gutter--><IMG height=1 alt="" 
            src="编写多线程的 Java 应用程序——如何避免当前编程中最常见的问题.files/c.gif" width=5></TD></TR>
        <TR vAlign=top height=5>
          <TD vAlign=top width=5></TD>
          <TD vAlign=top width=5></TD>
          <TD vAlign=top width=5></TD></TR>
        <TR vAlign=top height=5>
          <TD vAlign=top width=5></TD>
          <TD vAlign=top width=5><!-- 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 
                  src="编写多线程的 Java 应用程序——如何避免当前编程中最常见的问题.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#333333 height=1><IMG height=1 
                  src="编写多线程的 Java 应用程序——如何避免当前编程中最常见的问题.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#000000 height=1><IMG height=1 
                  src="编写多线程的 Java 应用程序——如何避免当前编程中最常见的问题.files/c.gif" width=150 
                  border=0></TD></TR>
              <TR>
                <TD width="100%" bgColor=#ffffff height=5><IMG height=5 
                  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="Writing multithreaded Java applications" 
                  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=580 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=5></TD></TR>
        <TR vAlign=top height=5>
          <TD vAlign=top width=5></TD>
          <TD vAlign=top width=5></TD>
          <TD vAlign=top 
  width=5></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 + -