目录
(2)ArrayBlockingQueue源码中的变量与队列的初始化
(4)ArrayBlockingQueue中出队一个元素的方法
一、概述
BlockingQueue:阻塞队列,它是通过一个共享队列,使数据由队列的一端输入,从另一端输出,常见的队列有两种:
先进先出:先插入队列的元素也最先出队列。
后进先出:后插入的元素最先出队列。
在多线程环境中,通过队列可以实现数据共享,在BlockingQueue中,如果队列使空的,从队列中取东西的操作将会被阻断进入等待状态,知道队列中插入了元素才会被唤醒;同样,如果队列是满的,往队列中插入元素也会被阻断进入等待状态,直到队列中有空间才会被唤醒继续操作。
二、BlockingQueue接口中的主要方法
1.插入元素的方法
boolean add(E e):向队列中插入一个元素,如果可以插入,则返回true,如果不能插入,则抛出异常;
boolean offer(E e):向队列中插入元素,如果队列中可以插入元素,则返回true,否则返回false;
void put(E e) throws InterruptedException:向队列中插入元素,如果队列中没有空间,则调用该方法的线程被阻塞直到队列中有空间;
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException:向队列中插入元素,如果队列中没有空间,则等待一定的时间,如果在等待时间内还不能插入元素,则返回失败;
2.取出元素的方法
E take() throws InterruptedException:从队列的对头取出元素,如果队列为空,则阻断该线程进入等待状态,直到队列中有元素;
E poll(long timeout, TimeUnit unit) throws InterruptedException:从队列中取出元素,如果队列为空,则进入等待状态,在等待时间内仍未取得元素,则返回失败;
3.其他方法
int remainingCapacity():获取队列中的剩余空间,在无阻塞的理想情况下,此队列能够接受的元素数量