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

📄 object.html

📁 j2se5-api-zh,java文档的中文版本
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<A NAME="wait(long)"><!-- --></A><H3>wait</H3><PRE>public final void <B>wait</B>(long&nbsp;timeout)                throws <A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>导致当前的线程等待,直到其他线程调用此对象的 <A HREF="Object.html#notify()"><CODE>notify()</CODE></A> 方法或 <A HREF="Object.html#notifyAll()"><CODE>notifyAll()</CODE></A> 方法,或者超过指定的时间量。  <p>当前的线程必须拥有此对象监视器。  <p>此方法导致当前线程(称之为 <var>T</var>)将其自身放置在对象的等待集中,然后放弃此对象上的所有同步要求。出于线程调度目的,线程 <var>T</var> 被禁用,且处于休眠状态,直到发生以下四种情况之一:<ul><li>其他某个线程调用此对象的 <tt>notify</tt> 方法,并且线程 <var>T</var> 碰巧被任选为被唤醒的线程。 <li>其他某个线程调用此对象的 <tt>notifyAll</tt> 方法。 <li>其他某个线程<A HREF="Thread.html#interrupt()"><CODE>中断</CODE></A>线程 <var>T</var>。 <li>已经到达指定的实际时间。但是,如果 <tt>timeout</tt> 为零,则不考虑实际时间,该线程将一直等待,直到获得通知。  </ul>然后,从对象的等待集中删除线程 <var>T</var>,并重新进行线程调度。然后,该线程以常规方式与其他线程竞争,以获得在该对象上同步的权利;一旦获得对该对象的控制权,该对象上的所有其同步声明都将被还原到以前的状态??这就是调用 <tt>wait</tt> 方法时的情况。然后,线程 <var>T</var> 从 <tt>wait</tt> 方法的调用中返回。所以,从 <tt>wait</tt> 方法返回时,该对象和线程 <tt>T</tt> 的同步状态与调用 <tt>wait</tt> 方法时的情况完全相同。  <p>在没有被通知、中断或超时的情况下,线程还可以唤醒一个所谓的<i>虚假唤醒</i> (spurious wakeup)。虽然这种情况在实践中很少发生,但是应用程序必须通过以下方式防止其发生,即对应该导致该线程被提醒的条件进行测试,如果不满足该条件,则继续等待。换句话说,等待应总是发生在循环中,如下面的示例: <pre>synchronized (obj) {while (&lt;condition does not hold&gt;)obj.wait(timeout);... // Perform action appropriate to condition     } </pre>(有关这一主题的更多信息,请参阅 Doug Lea 撰写的《Concurrent Programming in Java (Second Edition)》(Addison-Wesley, 2000) 中的第 3.2.3 节或 Joshua Bloch 撰写的《Effective Java Programming Language Guide》(Addison-Wesley, 2001) 中的第 50 项。 <p>如果当前线程在等待时被其他线程<A HREF="Thread.html#interrupt()"><CODE>中断</CODE></A>,则会抛出 <tt>InterruptedException</tt>。在按上述形式恢复此对象的锁定状态时才会抛出此异常。 <p>注意,由于 <tt>wait</tt> 方法将当前的线程放入了对象的等待集中,所以它只能解除此对象的锁定;可以同步当前线程的任何其他对象在线程等待时仍处于锁定状态。 <p>此方法只应由作为此对象监视器的所有者的线程来调用。请参阅 <code>notify</code> 方法,了解线程能够成为监视器所有者的方法的描述。<P><DD><DL><DT><B>参数:</B><DD><CODE>timeout</CODE> - 要等待的最长时间(以毫秒为单位)。<DT><B>抛出:</B><DD><CODE><A HREF="IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果超时值为负。<DD><CODE><A HREF="IllegalMonitorStateException.html" title="java.lang 中的类">IllegalMonitorStateException</A></CODE> - 如果当前的线程不是此对象监视器的所有者。<DD><CODE><A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果在当前线程等待通知之前或者正在等待通知时,另一个线程中断了当前线程。在抛出此异常时,当前线程的<i>中断状态</i> 被清除。<DT><B>另请参见:</B><DD><A HREF="Object.html#notify()"><CODE>notify()</CODE></A>, <A HREF="Object.html#notifyAll()"><CODE>notifyAll()</CODE></A></DL></DD></DL><HR><A NAME="wait(long, int)"><!-- --></A><H3>wait</H3><PRE>public final void <B>wait</B>(long&nbsp;timeout,                       int&nbsp;nanos)                throws <A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>导致当前的线程等待,直到其他线程调用此对象的 <A HREF="Object.html#notify()"><CODE>notify()</CODE></A> 方法或 <A HREF="Object.html#notifyAll()"><CODE>notifyAll()</CODE></A> 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。  <p>此方法类似于一个参数的 <code>wait</code> 方法,但它允许更好地控制在放弃之前等待通知的时间量。用毫微秒度量的实际时间量可以通过以下公式计算出来: <blockquote> <pre>1000000*timeout+nanos</pre></blockquote> <p>在其他所有方面,此方法执行的操作与带有一个参数的 <A HREF="Object.html#wait(long)"><CODE>wait(long)</CODE></A> 方法相同。需要特别指出的是,<tt>wait(0, 0)</tt> 与 <tt>wait(0)</tt> 相同。 <p>当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权,并等待下面两个条件之一发生:  <ul><li>其他线程通过调用 <code>notify</code> 方法,或 <code>notifyAll</code> 方法通知在此对象的监视器上等待的线程醒来。 <li><code>timeout</code> 毫秒值与 <code>nanos</code> 毫微秒参数值之和指定的超时时间已用完。  </ul> <p>然后,该线程等到重新获得对监视器的所有权后才能继续执行。 <p>对于某一个参数的版本,实现中断和虚假唤醒是有可能的,并且此方法应始终在循环中使用: <pre>synchronized (obj) {while (&lt;condition does not hold&gt;)obj.wait(timeout, nanos);... // Perform action appropriate to condition     } </pre>此方法只应由作为此对象监视器的所有者的线程来调用。请参阅 <code>notify</code> 方法,了解线程能够成为监视器所有者的方法的描述。<P><DD><DL><DT><B>参数:</B><DD><CODE>timeout</CODE> - 要等待的最长时间(以毫秒为单位)。<DD><CODE>nanos</CODE> - 额外时间(以毫微秒为单位,范围是 0-999999)。<DT><B>抛出:</B><DD><CODE><A HREF="IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果超时值是负数,或者毫微秒值不在 0-999999 范围内。<DD><CODE><A HREF="IllegalMonitorStateException.html" title="java.lang 中的类">IllegalMonitorStateException</A></CODE> - 如果当前线程不是此对象监视器的所有者。<DD><CODE><A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果在当前线程等待通知之前或者正在等待通知时,其他线程中断了当前线程。在抛出此异常时,当前线程的<i>中断状态</i> 被清除。</DL></DD></DL><HR><A NAME="wait()"><!-- --></A><H3>wait</H3><PRE>public final void <B>wait</B>()                throws <A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>导致当前的线程等待,直到其他线程调用此对象的 <A HREF="Object.html#notify()"><CODE>notify()</CODE></A> 方法或 <A HREF="Object.html#notifyAll()"><CODE>notifyAll()</CODE></A> 方法。换句话说,此方法的行为就好像它仅执行 <tt>wait(0)</tt> 调用一样。 <p>当前的线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 <code>notify</code> 方法,或 <code>notifyAll</code> 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。  <p>对于某一个参数的版本,实现中断和虚假唤醒是可能的,而且此方法应始终在循环中使用: <pre>synchronized (obj) {while (&lt;condition does not hold&gt;)obj.wait();... // Perform action appropriate to condition     } </pre>此方法只应由作为此对象监视器的所有者的线程来调用。请参阅 <code>notify</code> 方法,了解线程能够成为监视器所有者的方法的描述。<P><DD><DL><DT><B>抛出:</B><DD><CODE><A HREF="IllegalMonitorStateException.html" title="java.lang 中的类">IllegalMonitorStateException</A></CODE> - 如果当前的线程不是此对象监视器的所有者。<DD><CODE><A HREF="InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果在当前线程等待通知之前或者正在等待通知时,另一个线程中断了当前线程。在抛出此异常时,当前线程的<i>中断状态</i> 被清除。<DT><B>另请参见:</B><DD><A HREF="Object.html#notify()"><CODE>notify()</CODE></A>, <A HREF="Object.html#notifyAll()"><CODE>notifyAll()</CODE></A></DL></DD></DL><HR><A NAME="finalize()"><!-- --></A><H3>finalize</H3><PRE>protected void <B>finalize</B>()                 throws <A HREF="Throwable.html" title="java.lang 中的类">Throwable</A></PRE><DL><DD>当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 <code>finalize</code> 方法,以配置系统资源或执行其他清除。  <p><tt>finalize</tt> 的常规协定是:当 Java<font size="-2"><sup>TM</sup></font> 虚拟机已确定尚未终止的任何线程无法再通过任何方法访问此对象时,将调用此方法,除非由于准备终止的其他某个对象或类的终结操作执行了某个操作。<tt>finalize</tt> 方法可以采取任何操作,其中包括再次使此对象对其他线程可用;不过,<tt>finalize</tt> 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。  <p><tt>Object</tt> 类的 <tt>finalize</tt> 方法执行非特殊性操作;它仅执行一些常规返回。<tt>Object</tt> 的子类可以重写此定义。 <p>Java 编程语言不保证哪个线程将调用某个给定对象的 <tt>finalize</tt> 方法。但可以保证在调用 finalize 时,调用 finalize 的线程将不会持有任何用户可见的同步锁定。如果 finalize 方法抛出未捕获的异常,那么该异常将被忽略,并且该对象的终结操作将终止。 <p>在启用某个对象的 <tt>finalize</tt> 方法后,将不会执行进一步操作,直到 Java 虚拟机再次确定尚未终止的任何线程无法再通过任何方法访问此对象,其中包括由准备终止的其他对象或类执行的可能操作,在执行该操作时,对象可能被丢弃。 <p>对于任何给定对象,Java 虚拟机最多只调用一次 <tt>finalize</tt> 方法。 <p><code>finalize</code> 方法抛出的任何异常都会导致此对象的终结操作停止,但可以通过其他方法忽略它。<P><DD><DL><DT><B>抛出:</B><DD><CODE><A HREF="Throwable.html" title="java.lang 中的类">Throwable</A></CODE> - 此方法抛出的 <code>Exception</code></DL></DD></DL><!-- ========= END OF CLASS DATA ========= --><HR><!-- ======= START OF BOTTOM NAVBAR ====== --><A NAME="navbar_bottom"><!-- --></A><A HREF="#skip-navbar_bottom" title="跳过导航链接"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_bottom_firstrow"><!-- --></A><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">  <TR ALIGN="center" VALIGN="top">  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>概述</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>类</B></FONT>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Object.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A>&nbsp;</TD>  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A>&nbsp;</TD>  </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup>&nbsp;2&nbsp;Platform<br>Standard&nbsp;Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">&nbsp;<A HREF="NumberFormatException.html" title="java.lang 中的类"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="OutOfMemoryError.html" title="java.lang 中的类"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">  <A HREF="../../index.html@java_2Flang_2FObject.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="Object.html" target="_top"><B>无框架</B></A>  &nbsp;&nbsp;<SCRIPT type="text/javascript">  <!--  if(window==top) {    document.writeln('<A HREF="../../allclasses-noframe.html"><B>所有类</B></A>');  }  //--></SCRIPT><NOSCRIPT>  <A HREF="../../allclasses-noframe.html"><B>所有类</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">  摘要:&nbsp;嵌套&nbsp;|&nbsp;字段&nbsp;|&nbsp;<A HREF="#constructor_summary">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息:&nbsp;字段&nbsp;|&nbsp;<A HREF="#constructor_detail">构造方法</A>&nbsp;|&nbsp;<A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_bottom"></A><!-- ======== END OF BOTTOM NAVBAR ======= --><HR><font size="-1"><a href="../../../../../../../../java.sun.com/cgi-bin/bugreport.cgi">提交错误或意见</a><br>有关更多的 API 参考资料和开发人员文档,请参阅 <a href="../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/devdocs-vs-specs.html">Java 2 SDK SE 开发人员文档</a>。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。 <p>版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守<a href="../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/license.html">许可证条款</a>。另请参阅<a href="../../../../../../../../java.sun.com/docs/redist.html">文档重新分发政策</a>。</font></BODY></HTML>

⌨️ 快捷键说明

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