专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
51好读  ›  专栏  ›  ImportNew

并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究

ImportNew  · 公众号  · Java  · 2017-07-17 13:03

正文

请到「今天看啥」查看全文



另外构造函数必须传入队列大小参数,所以为有界队列,默认是Lock为非公平锁。


public ArrayBlockingQueue(int capacity) {

this(capacity, false);

}

public ArrayBlockingQueue(int capacity, boolean fair) {

if (capacity <= 0)

throw new IllegalArgumentException();

this.items = new Object[capacity];

lock = new ReentrantLock(fair);

notEmpty = lock.newCondition();

notFull =  lock.newCondition();

}


三、offer操作


在队尾插入元素,如果队列满则返回false,否者入队返回true。


public boolean offer(E e) {

//e为null,则抛出NullPointerException异常

checkNotNull(e);

//获取独占锁

final ReentrantLock lock = this.lock;

lock.lock();

try {

//如果队列满则返回false

if (count == items.length)

return false;

else {

//否者插入元素

insert(e);

return true;

}

} finally {

//释放锁

lock.unlock();

}

}

private void insert(E x) {

//元素入队

items[putIndex] = x;







请到「今天看啥」查看全文