企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
常用的阻塞队列如下,它们都在`java.util.concurrent`包中,都实现了BlockingQueue接口,或BlockingDeque接口: * java.util.concurrent.ArrayBlockingQueue< E> 5.0 * ArrayBlockingQueue(int capacity) * ArrayBlockingQueue(int capacity, boolean fair) 构造一个带有指定容量和公平性设置的阻塞队列。该队列使用循环数组实现。公平性是指:优先处理等待最长时间的线程,使用公平性会降低队列性能,只有在确实需要的时候才会去使用它。 * java.util.concurrent.LinkedBlockingQueue< E> 5.0 * java.util.concurrent.LinkedBlockingDeque< E> 6 * LinkedBlockingQueue() * LinkedBlockingDeque() 构造一个无上限的阻塞队列或双向队列。都用链表实现。 * LinkedBlockingQueue(int capacity) * LinkedBlockingDeque(int capacity) 根据指定容量构建一个有限的阻塞队列,或双向队列。都用链表实现。 * java.util.concurrent.DelayQueue< E extends Delayed> 5.0 * DelayQueue() 构造一个包含Delayed元素的无界的阻塞时间有限的阻塞队列。只有那些延迟已经超过时间的元素可以从队列中移除。 * java.util.concurrent.Delayed 5.0 * long getDelay(TimeUnit unit) 得到该对象的延迟,用给定的时间单位进行度量。 * java.util.concurrent.PriorityBlockingQueue< E> 5.0 * PriorityBlockingQueue() * PriorityBlockingQueue(int initialCapacity) * PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator) 构造一个无边界阻塞优先队列,用堆实现。 initialCapacity:默认值为11; comparator:元素比较器,如果没有指定,则元素需要实现Comparable接口。 * java.util.concurrent.BlockingQueue< E> 5.0 * void put(E element) 添加元素,如果队列满,则阻塞。 * E take() 移除并返回头元素,队列为空,则阻塞。 * boolean offer(E element, long time, TimeUnit unit) 添加给定元素,成功返回true;如果队列满,或超时,返回false。 * E poll(long time, TimeUnit unit) 移除并返回头元素。队列为空,或超时则返回null。 * java.util.concurrent.BlockingDeque< E> 6 * void putFirst(E element) * void putLast(E element) 向队头,队尾添加元素,队列满则阻塞。 * E takeFirst() * E takeLast() 移除并返回头元素,或尾元素,队列空则阻塞。 * boolean offerFirst(E element, long time, TimeUnit unit) * boolean offerLast(E element, long time, TimeUnit unit) 添加给定元素,成功返回true;队满,或超时则返回false。 * E pollFirst(long time, TimeUnit unit) * E pollLast(long time, TimeUnit unit) 移除并返回头元素,或尾元素;队为空、或超时则返回null。 * java.util.concurrent.Transfer Queue< E> 7 * void transfer(E element) * boolean tryTransfer(E element, long time, TimeUnit unit) 传输一个值,或者尝试在给定的超时时间内传输这个值,这个调用将阻塞,直到另一个线程将元素删除。第二个方法会调用成功时返回true。 操作队列还有如下方法: (1)`add` 添加一个元素 。队满,抛出IllegalStateException异常。(不常用,常用`put`方法代替) (2)`element` 返回队头元素。队空,抛出NoSuchElementException异常。(不常用,常用`peek`方法替代) (3)`peek` 返回队头元素。队空,返回null。 (4)`remove` 移除并返回队头元素。队空,抛出NoSuchElementException异常。(不常用,常用`poll`方法代替)