目录
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点
面试官:怎么判断并发队列是阻塞队列还是非阻塞队列
并发队列根据其对操作的处理方式,可以分为阻塞队列(Blocking Queue)和非阻塞队列(Non-Blocking Queue)。
判断一个并发队列是阻塞队列还是非阻塞队列的关键在于观察队列操作在无法立即完成时的行为:
- 如果操作会暂停(阻塞)等待直到可以完成,则是阻塞队列。
- 如果操作会立即返回,不进行等待,则是非阻塞队列。
阻塞队列(Blocking Queue)
阻塞队列是一种特殊类型的并发队列,当队列为空时,出队(dequeue)操作会阻塞调用线程,直到队列中有元素可用。同样,当队列满时,入队(enqueue)操作也会阻塞调用线程,直到队列有空间容纳新元素。阻塞队列通过使用内部锁或其他同步机制来保证操作的原子性和线程间的协调。
判断依据:
- 如果队列的出队操作在队列为空时会暂停(阻塞)调用线程,直到有元素可消费,则该队列是阻塞队列。
- 如果队列的入队操作在队列满时会暂停(阻塞)调用线程,直到队列有空间可添加新元素,则该队列也是阻塞队列。
例子:
假设有一个生产者-消费者问题,生产者负责生成数据,消费者负责处理数据。使用阻塞队列来作为生产者和消费者之间的缓冲区: