1、阻塞队列分类ArrayB盟敢势袂lockingQueue :一个由数组结构组成的有界阻塞队列。LinkedBlockingQueu髫潋啜缅e :一个由链表结构组成的有界阻塞队列。PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。DelayQueue:一个使用优先级队列实现的无界阻塞队列。SynchronousQueue:一个不存储元素的阻塞队列。LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
2、四种处理方法队列的操作只是插入、删除、检测,而对这三种操作有对应的处理方法,1)抛出异常2)返回特殊值3)一直阻塞4)超时退出
3、抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Qu髫潋啜缅eue full”)异常。当队列为空时,从队列里获取元素时会抛出NoSuchElementException异常 。返回特殊值:插入方法会返回是否成功,成功则返回true。移除方法,则是从队列里拿出一个元素,如果没有则返回null一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。
4、阻塞队列实现原理之添加元素put 方法实现代码,先获取了锁,并且获取的是可中断锁,然后判断当前元素个数是否等于数组的长度,如果相等,则调用 notFull.await() 进行等待,如果捕获到中断异常,则唤醒线程并抛出异常。当被其他线程唤醒时,通过 insert(e)方法插入元素,最后解锁。
5、阻塞队列实现原理之删除元素take 方法实现代码,take方法等待的是notEmpty信号。在take方法中,如果可以取元素,则通过extract方法取得元素,最后解锁。