ArrayBlockingQueue和ArrayDeque的区别
ArrayBlockingQueue以FIFO顺序存储元素。元素的插入总是发生在队列的尾部,元素的去除总是发生在队列的头部。它是线程安全的,并且它是有界数组队列,因此一旦创建,就无法更改容量。它是阻塞队列的实现。
根据Java文档
Deque接口的是可调整大小的数组实现。队列没有容量限制。它们会根据需要增长以支持使用。它们不是线程安全的。在没有外部同步的情况下,它们不支持多个线程的并发访问。空元素是禁止的。用作堆栈时,此类可能比Stack快,而用作队列时,此类则比LinkedList快。
序号 | 特点 | ArrayBlockingQueue | ArrayDeque |
---|---|---|---|
1 | 基本特征 | 它实现了BlockingQueue接口 | 它实现了Deque接口 |
2 | 是否自动扩容 | 它是有界数组队列。因此,一旦创建,容量就无法更改 | 它是Deque的可调整大小的数组实现 |
3 | 线程是否安全 | 这是线程安全的 | 它不是线程安全的 |
4 |
插入/取出 | 元素的插入总是发生在队列的尾部,元素的去除总是发生在队列的头部 | 它支持两端的元素插入和移除 |