AbstractBlockingQueue底层实现

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:

    

猜你喜欢

转载自my.oschina.net/lovexin/blog/1791142