condition.html
来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 546 行 · 第 1/3 页
HTML
546 行
</TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> void</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#await()">await</A></B>()</CODE><BR> 造成当前线程在接到信号或被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>之前一直处于等待状态。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> boolean</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#await(long, java.util.concurrent.TimeUnit)">await</A></B>(long time, <A HREF="../TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A> unit)</CODE><BR> 造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> long</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#awaitNanos(long)">awaitNanos</A></B>(long nanosTimeout)</CODE><BR> 造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> void</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#awaitUninterruptibly()">awaitUninterruptibly</A></B>()</CODE><BR> 造成当前线程在接到信号之前一直处于等待状态。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> boolean</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#awaitUntil(java.util.Date)">awaitUntil</A></B>(<A HREF="../../Date.html" title="java.util 中的类">Date</A> deadline)</CODE><BR> 造成当前线程在接到信号、被中断或到达指定最后期限之前一直处于等待状态。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> void</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#signal()">signal</A></B>()</CODE><BR> 唤醒一个等待线程。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE> void</CODE></FONT></TD><TD><CODE><B><A HREF="Condition.html#signalAll()">signalAll</A></B>()</CODE><BR> 唤醒所有等待线程。</TD></TR></TABLE> <P><!-- ============ METHOD DETAIL ========== --><A NAME="method_detail"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"><TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"><B>方法详细信息</B></FONT></TH></TR></TABLE><A NAME="await()"><!-- --></A><H3>await</H3><PRE>void <B>await</B>() throws <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>造成当前线程在接到信号或被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>之前一直处于等待状态。<p>与此 <tt>Condition</tt> 相关的锁定被原子地释放,并且出于线程调度的目的,将禁用当前线程,且在发生以下四种情况<em>之一</em> 以前,当前线程将一直处于休眠状态: <ul><li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signal()"><CODE>signal()</CODE></A> 方法,并且碰巧将当前线程选为被唤醒的线程;或者<li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signalAll()"><CODE>signalAll()</CODE></A> 方法;或者<li>其他某个线程<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程,且支持中断线程的挂起;或者<li>发生“<em>虚假唤醒</em>” </ul><p>在所有情况下,在此方法可以返回当前线程之前,都必须重新获取与此条件有关的锁定。在线程返回时,可以<em>保证</em> 它保持此锁定。<p>如果当前线程: <ul><li>在进入此方法时已经设置了该线程的中断状态;或者<li>在支持等待和中断线程挂起时,线程被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>, </ul>则抛出 <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类"><CODE>InterruptedException</CODE></A>,并清除当前线程的中断状态。在第一种情况下,没有指定是否在释放锁定之前发生中断测试。 <p><b>实现注意事项</b><p>假定调用此方法时,当前线程保持了与此 <tt>Condition</tt> 有关联的锁定。这取决于确定是否为这种情况以及不是时,如何对此作出响应的实现。通常,将抛出一个异常(比如 <A HREF="../../../lang/IllegalMonitorStateException.html" title="java.lang 中的类"><CODE>IllegalMonitorStateException</CODE></A>)并且该实现必须对此进行记录。<p>与响应某个信号而返回的普通方法相比,实现可能更喜欢响应某个中断。在这种情况下,实现必须确保信号被重定向到另一个等待线程(如果有的话)。<P><DD><DL><DT><B>抛出:</B><DD><CODE><A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果当前线程被中断(并且支持中断线程挂起)。</DL></DD></DL><HR><A NAME="awaitUninterruptibly()"><!-- --></A><H3>awaitUninterruptibly</H3><PRE>void <B>awaitUninterruptibly</B>()</PRE><DL><DD>造成当前线程在接到信号之前一直处于等待状态。<p>与此条件相关的锁定被原子地释放,并且出于线程调度的目的,将禁用当前线程,且在发生以下三种情况<em>之一</em> 以前,当前线程将一直处于休眠状态: <ul><li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signal()"><CODE>signal()</CODE></A> 方法,并且碰巧将当前线程选为被唤醒的线程;或者<li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signalAll()"><CODE>signalAll()</CODE></A> 方法;或者<li>发生“<em>虚假唤醒</em>” </ul><p>在所有情况下,在此方法可以返回当前线程之前,都必须重新获取与此条件有关的锁定。在线程返回时,可以<em>保证</em> 它保持此锁定。<p>如果在进入此方法时设置了当前线程的中断状态,或者在等待时,线程被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,那么在接到信号之前,它将继续等待。当最终从此方法返回时,仍然将设置其中断状态。 <p><b>实现注意事项</b><p>假定调用此方法时,当前线程保持了与此 <tt>Condition</tt> 有关联的锁定。这取决于确定是否为这种情况以及不是时,如何对此作出响应的实现。通常,将抛出一个异常(比如 <A HREF="../../../lang/IllegalMonitorStateException.html" title="java.lang 中的类"><CODE>IllegalMonitorStateException</CODE></A>)并且该实现必须对此进行记录。<P><DD><DL></DL></DD></DL><HR><A NAME="awaitNanos(long)"><!-- --></A><H3>awaitNanos</H3><PRE>long <B>awaitNanos</B>(long nanosTimeout) throws <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></PRE><DL><DD>造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。<p>与此条件相关的锁定被原子地释放,并且出于线程调度的目的,将禁用当前线程,且在发生以下五种情况<em>之一</em> 以前,当前线程将一直处于休眠状态: <ul><li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signal()"><CODE>signal()</CODE></A> 方法,并且碰巧将当前线程选为被唤醒的线程;或者 <li>其他某个线程调用此 <tt>Condition</tt> 的 <A HREF="Condition.html#signalAll()"><CODE>signalAll()</CODE></A> 方法;或者<li>其他某个线程<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程,且支持中断线程的挂起;或者<li>已超过指定的等待时间;或者<li>发生“<em>虚假唤醒</em>”。 </ul><p>在所有情况下,在此方法可以返回当前线程之前,都必须重新获取与此条件有关的锁定。在线程返回时,可以<em>保证</em> 它保持此锁定。<p>如果当前线程: <ul><li>在进入此方法时已经设置了该线程的中断状态;或者<li>在支持等待和中断线程挂起时,线程被<A HREF="../../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>, </ul>则抛出 <A HREF="../../../lang/InterruptedException.html" title="java.lang 中的类"><CODE>InterruptedException</CODE></A>,并且清除当前线程的已中断状态。在第一种情况下,没有指定是否在释放锁定之前发生中断测试。<p>在返回时,该方法返回了所剩毫微秒数的一个估计值,以等待所提供的 <tt>nanosTimeout</tt> 值的时间,如果超时,则返回一个小于或等于 0 的值。可以用此值来确定在等待返回但某一等待条件仍不具备的情况下,是否要再次等待,以及再次等待的时间。此方法的典型用法采用以下形式: <pre> synchronized boolean aMethod(long timeout, TimeUnit unit) { long nanosTimeout = unit.toNanos(timeout); while (!conditionBeingWaitedFor) { if (nanosTimeout > 0) nanosTimeout = theCondition.awaitNanos(nanosTimeout); else return false; } // ... } </pre><p> 设计注意事项:此方法需要一个 nanosecond 参数,以避免在报告剩余时间时出现截断错误。在发生重新等待时,这种精度损失使得程序员难以确保总的等待时间不少于指定等待时间。<p><b>实现注意事项</b><p>假定调用此方法时,当前线程保持了与此 <tt>Condition</tt> 有关联的锁定。这取决于确定是否为这种情况以及不是时,如何对此作出响应的实现。通常会抛出一个异常(比如 <A HREF="../../../lang/IllegalMonitorStateException.html" title="java.lang 中的类"><CODE>IllegalMonitorStateException</CODE></A>)并且该实现必须对此进行记录。
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?