1.1 ArrayBlockingQueue是什么?
1.1ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据(实际上可看作一个循环数组)。常用的操作包括 add ,offer,put,remove,poll,take,peek。
1.2 阻塞队列提供了四种处理方法:
方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出
插入方法 add(e) offer(e) put(e) offer(e,time,unit)
移除方法 remove() poll() take() poll(time,unit)
检查方法 element() peek() 不可用 不可用
1.3 数据添加:
1.3.1 add:
第一步:会调用父类的方法
第二步:调用offer(添加方法,下面再说),由于父类没有实现该方法,又回到ArrayBlockingQueue类中调用改方法
如果添加失败,即抛出异常
1.3.2 offer:
第一步:判断插入元素是否null
第二步:获得重入锁
第三步:阻塞线程
第四步:判断当前元素数量是否已经等于最大的队列长度
第五步:插入元素
第六步:释放锁
插入元素详解:
1.3.2 put:
相对于offer(),如果元素数量与队列长度相等,会阻塞线程,其他的和offer()大致相对
1.4 数据删除:
1.4.1 remove:
1.4.2 poll():
1.4.3 take: