LinkedBlockingQueue与ArrayBlockingQueue的差别在数据结构,一个是链表,一个是数组,逻辑上没有太大差别,可以去看看我的另一篇文章java并发编程-有界阻塞队列ArrayBlockingQueue
可能会导致疑惑的点
put(E e) 方法
下边这两截代码可能会导致疑惑,count已经+1了,为什么还要判断 c==0
原因是因为 count.getAndIncrement() 返回的是自增1之前的值
c = count.getAndIncrement();
//=====================
if (c == 0)
signalNotEmpty();
E take()
下边这两截代码可能会导致疑惑,count已经-1了,为什么还要判断 c==capacity
原因是因为 count.getAndDecrement() 返回的是自减1之前的值
c = count.getAndDecrement();
//=====================
if (c == capacity)
signalNotFull();