blockingqueue.html

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

HTML
528
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--NewPage--><HTML><HEAD><!-- Generated by javadoc (build 1.5.0_03) on Wed Nov 02 09:51:32 CST 2005 --><META http-equiv="Content-Type" content="text/html; charset=gb2312"><TITLE>BlockingQueue (Java 2 Platform SE 5.0)</TITLE><META NAME="keywords" CONTENT="java.util.concurrent.BlockingQueue interface"><LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style"><SCRIPT type="text/javascript">function windowTitle(){    parent.document.title="BlockingQueue (Java 2 Platform SE 5.0)";}</SCRIPT><NOSCRIPT></NOSCRIPT></HEAD><BODY BGCOLOR="white" onload="windowTitle();"><!-- ========= START OF TOP NAVBAR ======= --><A NAME="navbar_top"><!-- --></A><A HREF="#skip-navbar_top" title="跳过导航链接"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_top_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/BlockingQueue.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="ArrayBlockingQueue.html" title="java.util.concurrent 中的类"><B>上一个类</B></A>&nbsp;&nbsp;<A HREF="BrokenBarrierException.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_2FBlockingQueue.html" target="_top"><B>框架</B></A>  &nbsp;&nbsp;<A HREF="BlockingQueue.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;构造方法&nbsp;|&nbsp;<A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息:&nbsp;字段&nbsp;|&nbsp;构造方法&nbsp;|&nbsp;<A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_top"></A><!-- ========= END OF TOP NAVBAR ========= --><HR><!-- ======== START OF CLASS DATA ======== --><H2><FONT SIZE="-1">java.util.concurrent</FONT><BR>接口 BlockingQueue&lt;E&gt;</H2><DL><DT><DT><B>类型参数:</B><DD><CODE>E</CODE> - 在此 collection 中保持的元素类型</DL><DL><DT><B>所有超级接口:</B> <DD><A HREF="../Collection.html" title="java.util 中的接口">Collection</A>&lt;E&gt;, <A HREF="../../lang/Iterable.html" title="java.lang 中的接口">Iterable</A>&lt;E&gt;, <A HREF="../Queue.html" title="java.util 中的接口">Queue</A>&lt;E&gt;</DD></DL><DL><DT><B>所有已知实现类:</B> <DD><A HREF="ArrayBlockingQueue.html" title="java.util.concurrent 中的类">ArrayBlockingQueue</A>, <A HREF="DelayQueue.html" title="java.util.concurrent 中的类">DelayQueue</A>, <A HREF="LinkedBlockingQueue.html" title="java.util.concurrent 中的类">LinkedBlockingQueue</A>, <A HREF="PriorityBlockingQueue.html" title="java.util.concurrent 中的类">PriorityBlockingQueue</A>, <A HREF="SynchronousQueue.html" title="java.util.concurrent 中的类">SynchronousQueue</A></DD></DL><HR><DL><DT><PRE>public interface <B>BlockingQueue&lt;E&gt;</B><DT>extends <A HREF="../Queue.html" title="java.util 中的接口">Queue</A>&lt;E&gt;</DL></PRE><P>支持两个附加操作的 <A HREF="../Queue.html" title="java.util 中的接口"><CODE>Queue</CODE></A>,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。<p><tt>BlockingQueue</tt> 不接受 <tt>null</tt> 元素。试图 <tt>add</tt>、<tt>put</tt> 或 <tt>offer</tt> 一个 <tt>null</tt> 元素时,某些实现会抛出 <tt>NullPointerException</tt>。<tt>null</tt> 被用作指示 <tt>poll</tt> 操作失败的警戒值。<p><tt>BlockingQueue</tt> 可以是限定容量的。它在任意给定时间都可以有一个 <tt>remainingCapacity</tt>,超出此容量,便无法无阻塞地 <tt>put</tt> 额外的元素。没有任何内部容量约束的 <tt>BlockingQueue</tt> 总是报告 <tt>Integer.MAX_VALUE</tt> 的剩余容量。<p> <tt>BlockingQueue</tt> 实现主要用于生产者-使用者队列,但它另外还支持 <A HREF="../Collection.html" title="java.util 中的接口"><CODE>Collection</CODE></A> 接口。因此,举例来说,使用 <tt>remove(x)</tt> 从队列中移除任意一个元素是有可能的。然而,这种操作通常<em>不</em> 会有效执行,只能有计划地偶尔使用,比如在取消排队信息时。<p> <tt>BlockingQueue</tt> 实现是线程安全的。所有排队方法都可以使用内部锁定或其他形式的并发控制来自动达到它们的目的。然而,<em>大量的</em> Collection 操作(<tt>addAll</tt>、<tt>containsAll</tt>、<tt>retainAll</tt> 和 <tt>removeAll</tt>)<em>没有</em> 必要自动执行,除非在实现中特别说明。因此,举例来说,在只添加了 <tt>c</tt> 中的一些元素后,<tt>addAll(c)</tt> 有可能失败(抛出一个异常)。<p><tt>BlockingQueue</tt> 实质上<em>不</em> 支持使用任何一种&ldquo;close&rdquo;或&ldquo;shutdown&rdquo;操作来指示不再添加任何项。这种功能的需求和使用有依赖于实现的倾向。例如,一种常用的策略是:对于生产者,插入特殊的 <em>end-of-stream</em> 或 <em>poison</em> 对象,并根据使用者获取这些对象的时间来对它们进行解释。 <p>以下是基于典型的生产者-使用者场景的一个用例。注意,<tt>BlockingQueue</tt> 可以安全地与多个生产者和多个使用者一起使用。 <pre> class Producer implements Runnable {   private final BlockingQueue queue;   Producer(BlockingQueue q) { queue = q; }   public void run() {     try {       while(true) { queue.put(produce()); }     } catch (InterruptedException ex) { ... handle ...}   }   Object produce() { ... } } class Consumer implements Runnable {   private final BlockingQueue queue;   Consumer(BlockingQueue q) { queue = q; }   public void run() {     try {       while(true) { consume(queue.take()); }     } catch (InterruptedException ex) { ... handle ...}   }   void consume(Object x) { ... } } class Setup {   void main() {     BlockingQueue q = new SomeQueueImplementation();     Producer p = new Producer(q);     Consumer c1 = new Consumer(q);     Consumer c2 = new Consumer(q);     new Thread(p).start();     new Thread(c1).start();     new Thread(c2).start();   } } </pre><p>此接口是 <a href="../../../../guide/collections/index.html">Java Collections Framework</a> 的成员。<P><P><DL><DT><B>从以下版本开始:</B></DT>  <DD>1.5</DD></DL><HR><P><!-- ========== METHOD SUMMARY =========== --><A NAME="method_summary"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"><TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"><B>方法摘要</B></FONT></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;boolean</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#add(E)">add</A></B>(<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&nbsp;o)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将指定的元素添加到此队列中(如果立即可行),在成功时返回 <tt>true</tt>,其他情况则抛出 IllegalStateException。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;int</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#drainTo(java.util.Collection)">drainTo</A></B>(<A HREF="../Collection.html" title="java.util 中的接口">Collection</A>&lt;? super <A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&gt;&nbsp;c)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;移除此队列中所有可用的元素,并将它们添加到给定 collection 中。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;int</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#drainTo(java.util.Collection, int)">drainTo</A></B>(<A HREF="../Collection.html" title="java.util 中的接口">Collection</A>&lt;? super <A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&gt;&nbsp;c,        int&nbsp;maxElements)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;boolean</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#offer(E)">offer</A></B>(<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&nbsp;o)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果可能的话,将指定元素插入此队列中。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;boolean</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#offer(E, long, java.util.concurrent.TimeUnit)">offer</A></B>(<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&nbsp;o,      long&nbsp;timeout,      <A HREF="TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A>&nbsp;unit)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将指定的元素插入此队列中,如果没有可用空间,将等待指定的等待时间(如果有必要)。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A></CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#poll(long, java.util.concurrent.TimeUnit)">poll</A></B>(long&nbsp;timeout,     <A HREF="TimeUnit.html" title="java.util.concurrent 中的枚举">TimeUnit</A>&nbsp;unit)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检索并移除此队列的头部,如果此队列中没有任何元素,则等待指定等待的时间(如果有必要)。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;void</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#put(E)">put</A></B>(<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A>&nbsp;o)</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将指定元素添加到此队列中,如果没有可用空间,将一直等待(如果有必要)。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;int</CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#remainingCapacity()">remainingCapacity</A></B>()</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的元素数量;如果没有内部限制,则返回  <tt>Integer.MAX_VALUE</tt>。</TD></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"><CODE>&nbsp;<A HREF="BlockingQueue.html" title="BlockingQueue 中的类型参数">E</A></CODE></FONT></TD><TD><CODE><B><A HREF="BlockingQueue.html#take()">take</A></B>()</CODE><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;检索并移除此队列的头部,如果此队列不存在任何元素,则一直等待。</TD></TR></TABLE>&nbsp;<A NAME="methods_inherited_from_class_java.util.Queue"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor"><TH ALIGN="left"><B>从接口 java.util.<A HREF="../Queue.html" title="java.util 中的接口">Queue</A> 继承的方法</B></TH></TR><TR BGCOLOR="white" CLASS="TableRowColor"><TD><CODE><A HREF="../Queue.html#element()">element</A>, <A HREF="../Queue.html#peek()">peek</A>, <A HREF="../Queue.html#poll()">poll</A>, <A HREF="../Queue.html#remove()">remove</A></CODE></TD></TR></TABLE>&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A><TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""><TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">

⌨️ 快捷键说明

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