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);
注意事项
它是有界阻塞队列。它是由数组实现的,数组大小在构造函数指定,而且之后无法改变。
它是线程安全的队列。
不接受null元素。
公平性可在构造函数中指定。
此类及其迭代器实现了Collection 和 Iterator 接口的所有可选方法。
其容量在构造函数中指定。容量不可以自动扩展,也没有手动扩展接口。