BlockingQueue
其实就是阻塞队列,是基于阻塞机制实现的线程安全的队列。
BlockingQueue
不同于普通的Queue
的区别主要是:
- 通过在入队和出队时进行加锁,保证了队列线程安全
- 支持阻塞的入队和出队方法:当队列满时,会阻塞入队的线程,直到队列不满;当队列为空时,会阻塞出队的线程,直到队列中有元素。
支持4种方法
BlockingQueue的5种实现类
ArrayBlockingQueue阻塞实现
public void put(E e) throws InterruptedException {
checkNotNull(e);
final ReentrantLock lock = this.lock;
// 加锁
lock.lockInterruptibly();
try {
while (count == items.length) {
// 如果队列已满,线程阻塞,并添加到notFull条件队列中等待唤醒
notFull.await();
}
// 如果队列未满,则调用enqueue方法进行入队操作
enqueue(e);
} finally {
// 释放锁
lock.unlock();
}
}