面试题答案
一键面试使用场景
- 阻塞操作(put方法):适用于需要确保元素被成功插入队列的场景,若队列已满,线程会等待直至有空间可用。常用于生产者 - 消费者模型中,生产者需要确保数据可靠地进入队列,不丢失数据。
- 非阻塞操作(offer方法):适用于不希望线程因队列已满而阻塞的场景,调用者可快速得知插入操作是否成功,然后可选择执行其他逻辑,而不是等待队列有空间。
方法签名
- 阻塞操作(put方法):
public void put(E e) throws InterruptedException
- 非阻塞操作(offer方法):
public boolean offer(E e)
返回值
- 阻塞操作(put方法):无返回值。若操作成功,方法正常返回,若在等待过程中线程被中断,会抛出
InterruptedException
。 - 非阻塞操作(offer方法):返回
boolean
类型。如果元素成功插入队列,返回true
;如果队列已满,无法插入元素,则返回false
。
线程行为
- 阻塞操作(put方法):当队列已满时,调用
put
方法的线程会被阻塞,进入等待状态,直到队列有空间可用或者线程被中断。在此期间,线程不会占用CPU资源。 - 非阻塞操作(offer方法):无论队列是否已满,调用
offer
方法的线程都不会被阻塞,它会立即返回一个表示插入操作是否成功的布尔值,线程可继续执行后续代码。