ArrayBlockingQueue

ArrayBlockingQueue 介绍

ArrayBlockingQueue 类实现了BlockingQueue接口。

ArrayBlockingQueue 是有容量限制的,它内部使用数组保存元素,这意味着它无法存储无限量的元素。

它有一定存储数量的上限,当初始化该对象时就决定了该数量的大小,之后就无法改变了。

ArrayBlockingQueue 是以先进先出的顺序来保存元素的。

默认情况下,不保证是这种排序。然而,通过在构造函数将公平性 (fairness) 设置为 true 而构造的队列允许按照 FIFO 顺序访问线程。

 公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。

初始化

// 参数1:构造容量为1024的队列
BlockingQueue queue = new ArrayBlockingQueue(1024);

// 参数2:如果为true,则按照FIFO顺序访问插入或移除时受阻塞线程的队列;如果为false,则访问顺序是不确定的。
BlockingQueue queue = new ArrayBlockingQueue(1024,true);

// 参数3:可将一个已存在的集合对象作为初始化数据。
BlockingQueue queue = new ArrayBlockingQueue(1024,true,collection);

注意事项

  1. 它是有界阻塞队列。它是由数组实现的,数组大小在构造函数指定,而且之后无法改变。

  2. 它是线程安全的队列。

  3. 不接受null元素。

  4. 公平性可在构造函数中指定。

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

  6. 其容量在构造函数中指定。容量不可以自动扩展,也没有手动扩展接口。

你可能感兴趣的:(ArrayBlockingQueue)