cyclicbarrier.html

来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 510 行 · 第 1/2 页

HTML
510
字号
&nbsp;<P><!-- ========= CONSTRUCTOR DETAIL ======== --><A NAME="constructor_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="CyclicBarrier(int, java.lang.Runnable)"><!-- --></A><H3>CyclicBarrier</H3><PRE>public <B>CyclicBarrier</B>(int&nbsp;parties,                     <A HREF="../../lang/Runnable.html" title="java.lang 中的接口">Runnable</A>&nbsp;barrierAction)</PRE><DL><DD>创建一个新的 <tt>CyclicBarrier</tt>,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行。<P><DL><DT><B>参数:</B><DD><CODE>parties</CODE> - 在启动 barrier 前必须调用 <A HREF="CyclicBarrier.html#await()"><CODE>await()</CODE></A> 的线程数。<DD><CODE>barrierAction</CODE> - 在启动 barrier 时执行的命令;如果不执行任何操作,则该参数为 <tt>null</tt>。<DT><B>抛出:</B><DD><CODE><A HREF="../../lang/IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果 <tt>parties</tt> 小于 1。</DL></DL><HR><A NAME="CyclicBarrier(int)"><!-- --></A><H3>CyclicBarrier</H3><PRE>public <B>CyclicBarrier</B>(int&nbsp;parties)</PRE><DL><DD>创建一个新的 <tt>CyclicBarrier</tt>,它将在给定数量的参与者(线程)处于等待状态时启动,但它不会在每个 barrier 上执行预定义的操作。<P><DL><DT><B>参数:</B><DD><CODE>parties</CODE> - 在启动 barrier 前必须调用 <A HREF="CyclicBarrier.html#await()"><CODE>await()</CODE></A> 的线程数。<DT><B>抛出:</B><DD><CODE><A HREF="../../lang/IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果 <tt>parties</tt> 小于 1。</DL></DL><!-- ============ 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="getParties()"><!-- --></A><H3>getParties</H3><PRE>public int <B>getParties</B>()</PRE><DL><DD>返回要求启动此 barrier 的参与者数目。<P><DD><DL><DT><B>返回:</B><DD>要求启动此 barrier 的参与者数目。</DL></DD></DL><HR><A NAME="await()"><!-- --></A><H3>await</H3><PRE>public int <B>await</B>()          throws <A HREF="../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A>,                 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类">BrokenBarrierException</A></PRE><DL><DD>在所有<A HREF="CyclicBarrier.html#getParties()"><CODE>参与者</CODE></A>都已经在此 barrier 上调用 <tt>await</tt> 方法之前,将一直等待。<p>如果当前线程不是将到达的最后一个线程,出于调度目的,将禁用它,且在发生以下情况之一前,该线程将一直处于休眠状态: <ul><li>最后一个线程到达;或者<li>其他某个线程<A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程;或者<li>其他某个线程<A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>另一个等待线程;或者<li>其他某个线程在等待 barrier 时超时;或者<li>其他某个线程在此 barrier 上调用 <A HREF="CyclicBarrier.html#reset()"><CODE>reset()</CODE></A>。 </ul><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>如果在线程处于等待状态时 barrier 被 <A HREF="CyclicBarrier.html#reset()"><CODE>reset()</CODE></A>,或者在调用 <tt>await</tt> 时 barrier <A HREF="CyclicBarrier.html#isBroken()"><CODE>被损坏</CODE></A>,抑或任意一个线程正处于等待状态,则抛出 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类"><CODE>BrokenBarrierException</CODE></A> 异常。<p>如果任何线程在等待时被 <A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,则其他所有等待线程都将抛出 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类"><CODE>BrokenBarrierException</CODE></A> 异常,并将 barrier 置于损坏状态。<p>如果当前线程是最后一个将要到达的线程,并且构造方法中提供了一个非空的屏障操作,则在允许其他线程继续运行之前,当前线程将运行该操作。如果在执行屏障操作过程中发生异常,则该异常将传播到当前线程中,并将 barrier 置于损坏状态。<P><DD><DL><DT><B>返回:</B><DD>到达的当前线程的索引,其中,索引 <tt><A HREF="CyclicBarrier.html#getParties()"><CODE>getParties()</CODE></A> - 1</tt> 指示将到达的第一个线程,零指示最后一个到达的线程。<DT><B>抛出:</B><DD><CODE><A HREF="../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果当前线程在等待时被中断<DD><CODE><A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类">BrokenBarrierException</A></CODE> - 如果<em>另一个</em> 线程在当前线程等待时被中断,或者重置了 barrier,或者在调用 <tt>await</tt> 时 barrier 被损坏,抑或由于异常而导致屏障操作(如果存在)失败。</DL></DD></DL><HR><A NAME="await(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>await</H3><PRE>public int <B>await</B>(long&nbsp;timeout,                 <A HREF="TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A>&nbsp;unit)          throws <A HREF="../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A>,                 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类">BrokenBarrierException</A>,                 <A HREF="TimeoutException.html" title="java.util.concurrent 中的类">TimeoutException</A></PRE><DL><DD>在所有<A HREF="CyclicBarrier.html#getParties()"><CODE>参与者</CODE></A>都已经在此屏障上调用 <tt>await</tt> 方法之前,将一直等待。<p>如果当前线程不是将到达的最后一个线程,出于调度目的,将禁用它,且在发生以下情况之一前,该线程将一直处于休眠状态: <ul><li>最后一个线程到达;或者<li>超出指定的超时时间;或者<li>其他某个线程<A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>当前线程;或者<li>其他某个线程<A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>另一个等待线程;或者<li>其他某个线程在等待 barrier 时超时;或者<li>其他某个线程在此 barrier 上调用 <A HREF="CyclicBarrier.html#reset()"><CODE>reset()</CODE></A>。 </ul><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>如果超出指定的等待时间,则抛出 <A HREF="TimeoutException.html" title="java.util.concurrent 中的类"><CODE>TimeoutException</CODE></A> 异常。如果该时间小于或等于零,则此方法根本不会等待。<p>如果在线程处于等待状态时 barrier 被 <A HREF="CyclicBarrier.html#reset()"><CODE>reset()</CODE></A>,或者在调用 <tt>await</tt> 时 barrier <A HREF="CyclicBarrier.html#isBroken()"><CODE>被损坏</CODE></A>,抑或任意一个线程正处于等待状态,则抛出 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类"><CODE>BrokenBarrierException</CODE></A> 异常。<p>如果任何线程在等待时被<A HREF="../../lang/Thread.html#interrupt()"><CODE>中断</CODE></A>,则其他所有等待线程都将抛出 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类"><CODE>BrokenBarrierException</CODE></A>,并将屏障置于损坏状态。<p>如果当前线程是最后一个将要到达的线程,并且构造方法中提供了一个非空的屏障操作,则在允许其他线程继续运行之前,当前线程将运行该操作。如果在执行屏障操作过程中发生异常,则该异常将传播到当前线程中,并将 barrier 置于损坏状态。<P><DD><DL><DT><B>参数:</B><DD><CODE>timeout</CODE> - 等待 barrier 的时间<DD><CODE>unit</CODE> - 超时参数的时间单位<DT><B>返回:</B><DD>到达的当前线程的索引,其中,索引 <tt><A HREF="CyclicBarrier.html#getParties()"><CODE>getParties()</CODE></A> - 1</tt> 指示第一个将要到达的线程,零指示最后一个到达的线程。<DT><B>抛出:</B><DD><CODE><A HREF="../../lang/InterruptedException.html" title="java.lang 中的类">InterruptedException</A></CODE> - 如果当前线程在等待时被中断<DD><CODE><A HREF="TimeoutException.html" title="java.util.concurrent 中的类">TimeoutException</A></CODE> - 如果超出了指定的超时时间。<DD><CODE><A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类">BrokenBarrierException</A></CODE> - 如果<em>另一个</em> 线程在当前线程等待时被中断,或者重置了 barrier,或者调用 <tt>await</tt> 时 barrier 被损坏,抑或由于异常而导致屏障操作(如果存在)失败。</DL></DD></DL><HR><A NAME="isBroken()"><!-- --></A><H3>isBroken</H3><PRE>public boolean <B>isBroken</B>()</PRE><DL><DD>查询此屏障是否处于损坏状态。<P><DD><DL><DT><B>返回:</B><DD>如果因为构造或最后一次重置而导致中断或超时,从而使一个或多个参与者摆脱此 barrier,或者因为异常而导致某个屏障操作失败,则返回 <tt>true</tt>;否则返回 <tt>false</tt>。</DL></DD></DL><HR><A NAME="reset()"><!-- --></A><H3>reset</H3><PRE>public void <B>reset</B>()</PRE><DL><DD>将屏障重置为其初始状态。如果所有参与者目前都在屏障处等待,则它们将返回,同时抛出一个 <A HREF="BrokenBarrierException.html" title="java.util.concurrent 中的类"><CODE>BrokenBarrierException</CODE></A>。注意,在由于其他原因造成损坏<em>之后</em>,实行重置可能会变得很复杂;此时需要使用其他方式重新同步线程,并选择其中一个线程来执行重置。与为后续使用创建一个新 barrier 相比,这种方法可能更好一些。<P><DD><DL></DL></DD></DL><HR><A NAME="getNumberWaiting()"><!-- --></A><H3>getNumberWaiting</H3><PRE>public int <B>getNumberWaiting</B>()</PRE><DL><DD>返回当前在屏障处等待的参与者数目。此方法主要用于调试和断言。<P><DD><DL><DT><B>返回:</B><DD>当前阻塞在 <A HREF="CyclicBarrier.html#await()"><CODE>await()</CODE></A> 中的参与者数目。</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/CyclicBarrier.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="CountDownLatch.html" title="java.util.concurrent 中的类"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="Delayed.html" title="java.util.concurrent 中的接口"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">  <A HREF="../../../index.html@java_2Futil_2Fconcurrent_2FCyclicBarrier.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="CyclicBarrier.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 + =
减小字号Ctrl + -
显示快捷键?