ArrayBlockingQueue是一个基于数组实现的有界阻塞队列,它不允许值为null。
存储结构
1 | /** The queued items */ |
锁
1 | /** Main lock guarding all access */ |
构造方法
1 | // 默认使用非公平锁 |
进队
put方法
1 | public void put(E e) throws InterruptedException { |
实际的进队操作由enqueue方法实现。
1 | private void enqueue(E x) { |
offer方法
1 | public boolean offer(E e) { |
出队
take方法
1 | public E take() throws InterruptedException { |
实际的出队操作由dequeue方法实现。
1 | private E dequeue() { |
poll方法
poll方法不允许被中断,如果某个线程正在等待执行poll方法。如果队列为空,则不允许执行出队操作,直接返回null,什么也不发生。
1 | public E poll() { |
取队首
1 | public E peek() { |
方法比较
- 入队操作
put方法:允许被中断。当队列已满时,使当前线程处于等待状态,直到接到notFull的通知,才能执行入队操作。
offer方法:不允许被中断。当队列已满时,则不允许执行入队操作。
- 出队操作
take方法:允许被中断。当队列为空时,使当前线程处于等待状态,直到接到notEmpty的通知,才能执行出队操作。
poll方法:不允许被中断。当队列为空时,则不允许执行出队操作。