MST

星途 面试题库

面试题:Java中线程池工作队列类型之ArrayBlockingQueue

请简述Java线程池中使用ArrayBlockingQueue作为工作队列的特点,包括其初始化方式、容量限制以及对任务存取的特性。
37.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

初始化方式

通过new ArrayBlockingQueue(capacity)new ArrayBlockingQueue(capacity, fair)来初始化。其中capacity指定队列容量,fair为布尔值,若为true表示公平队列,即按照FIFO原则处理等待的线程;若为false(默认)表示非公平队列。

容量限制

ArrayBlockingQueue是有界队列,在初始化时就确定了固定容量。队列的容量决定了能够容纳任务的最大数量,一旦达到该容量,往队列中添加新任务可能会阻塞(取决于使用的添加方法)。

任务存取特性

  1. 插入操作
    • add(E e):如果队列未满,将元素添加到队列尾部并返回true;如果队列已满,则抛出IllegalStateException
    • offer(E e):如果队列未满,将元素添加到队列尾部并返回true;如果队列已满,返回false,不会阻塞。
    • offer(E e, long timeout, TimeUnit unit):在指定的等待时间内,如果队列有空间,将元素添加到队列尾部并返回true;如果等待时间结束队列仍无空间,则返回false
    • put(E e):如果队列已满,会阻塞当前线程,直到队列有空间,然后将元素添加到队列尾部。
  2. 移除操作
    • remove(Object o):移除队列中指定的元素,如果移除成功返回true,否则返回false
    • poll():移除并返回队列头部元素,如果队列为空则返回null
    • poll(long timeout, TimeUnit unit):在指定的等待时间内,如果队列不为空,移除并返回队列头部元素;如果等待时间结束队列仍为空,则返回null
    • take():如果队列为空,会阻塞当前线程,直到队列中有元素,然后移除并返回队列头部元素。
  3. 查看操作
    • element():返回队列头部元素,但不移除,如果队列为空则抛出NoSuchElementException
    • peek():返回队列头部元素,但不移除,如果队列为空则返回null