阻塞队列

mmda-site / 2023-07-24 / 原文

阻塞队列

什么是阻塞队列?

  阻塞队列:从名字可以看出,是一个队列,队列是一个先进先出(FIFO)的数据结构。与普通队列的区别是,多了两个方法,阻塞添加和阻塞删除方法

为什么用阻塞队列?

生产者消费者模式里的wait()和notify()需要我们手动去控制,容易出现死锁等问题。阻塞队列可以帮助我们去控制等待和通知。

img

offer:添加成功时返回true,添加失败返回false,不会阻塞,不会中断

add:添加成功时返回true,添加失败抛出异常,不会阻塞,不会中断

put:没有返回值,会阻塞,会中断

remove:

take 会阻塞,会中断,会一致阻塞,直到取得元素或当前线程中断

poll 会阻塞,会中断,阻塞时间参照timeout.timeUnit,当阻塞时间到了还没取得元素会返回null