博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类 ArrayBlockingQueue<E>(一个由数组支持的有界阻塞队列。)
阅读量:6572 次
发布时间:2019-06-24

本文共 3289 字,大约阅读时间需要 10 分钟。

类型参数:
E - 在此 collection 中保持的元素类型
所有已实现的接口:
, <E>, <E>, <E>, <E>

public class ArrayBlockingQueue
extends
implements
,
 

一个由数组支持的有界。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。

这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞。

此类支持对等待的生产者线程和使用者线程进行排序的可选公平策略。默认情况下,不保证是这种排序。然而,通过将公平性 (fairness) 设置为 true 而构造的队列允许按照 FIFO 顺序访问线程。公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。

此类及其迭代器实现了 和 接口的所有可选 方法。

此类是 的成员。

 

 

从以下版本开始:
1.5
另请参见:

构造方法摘要
(int capacity)
          创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue
(int capacity, boolean fair)
          创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue
(int capacity, boolean fair, <? extends > c)
          创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue,它最初包含给定 collection 的元素,并以 collection 迭代器的遍历顺序添加元素。

 

方法摘要
 boolean ( e)
          将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则抛出 IllegalStateException
 void ()
          自动移除此队列中的所有元素。
 boolean ( o)
          如果此队列包含指定的元素,则返回 true
 int (<? super > c)
          移除此队列中所有可用的元素,并将它们添加到给定 collection 中。
 int (<? super > c, int maxElements)
          最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。
 <> ()
          返回在此队列中的元素上按适当顺序进行迭代的迭代器。
 boolean ( e)
          将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则返回 false
 boolean ( e, long timeout,  unit)
          将指定的元素插入此队列的尾部,如果该队列已满,则在到达指定的等待时间之前等待可用的空间。
  ()
          获取但不移除此队列的头;如果此队列为空,则返回 null
  ()
          获取并移除此队列的头,如果此队列为空,则返回 null
  (long timeout,  unit)
          获取并移除此队列的头部,在指定的等待时间前等待可用的元素(如果有必要)。
 void ( e)
          将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间。
 int ()
          返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的其他元素数量。
 boolean ( o)
          从此队列中移除指定元素的单个实例(如果存在)。
 int ()
          返回此队列中元素的数量。
  ()
          获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
 [] ()
          返回一个按适当顺序包含此队列中所有元素的数组。
<T> T[]
(T[] a)
          返回一个按适当顺序包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
  ()
          返回此 collection 的字符串表示形式。

 

从类 java.util. 继承的方法
, ,

 

从类 java.util. 继承的方法
, , ,

 

从类 java.lang. 继承的方法
, , , , , , , , ,

 

从接口 java.util. 继承的方法
,

 

从接口 java.util. 继承的方法
, , , , , ,
示例代码:
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class Test10050 {
public static void main(String[] args) {
final Bussiness1 bussiness=new Bussiness1();
new Thread(new Runnable() {
public void run() {
for(int i=1;i<51;i++){
bussiness.sub(i);
}
}
}).start();
new Thread(new Runnable() {
public void run() {
for(int i=1;i<51;i++){
bussiness.main(i);
}
}
}).start();
}
}
class Bussiness1{
BlockingQueue<Integer> arrayBlock1=new ArrayBlockingQueue<Integer>(1);
BlockingQueue<Integer> arrayBlock2=new ArrayBlockingQueue<Integer>(1);
{
try {
arrayBlock2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public  void sub(int i){
try {
arrayBlock1.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<11;j++){
System.out.println("子线程第"+i+"次循环: 次数为"+j);
}
try {
arrayBlock2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void main(int i){
try {
arrayBlock2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<101;j++){
System.out.println("主线程第"+i+"次循环: 次数为"+j);
}
try {
arrayBlock1.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 

 

转载地址:http://beojo.baihongyu.com/

你可能感兴趣的文章
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
LINUX 11G RAC ASM磁盘组在线增加磁盘扩容
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
react-developer-tools
查看>>
几行c#代码,轻松搞定一个女大学生
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
浅谈java垃圾回收机制
查看>>
前端第五天
查看>>
shell脚本学习之for循环
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>