LinkedBlockingQueue详解( 二 )

LinkedBlockingQueue总结【1】无界阻塞队列,可以指定容量,默认为 Integer.MAX_VALUE , 先进先出,存取互不干扰
【2】数据结构:链表(可以指定容量,默认为 Integer.MAX_VALUE , 内部类Node存储元素)
【3】锁分离:存取互不干扰,存取操作的是不同的Node对象(takeLock【取Node节点保证前驱后继不乱】 , putLock【存Node节点保证前驱后继不乱】,删除时则两个锁一起加)【这是最大的亮点】
【4】阻塞对象(notEmpty【出队:队列count=0,无元素可取时,阻塞在该对象上】 , notFull【入队:队列count=capacity,放不进元素时,阻塞在该对象上】)
【5】入队,从队尾入队,由last指针记录 。
【6】出队,从队首出队,由head指针记录 。
【7】线程池中采用LinkedBlockingQueue而不采用ArrayBlockingQueue的原因便是因为锁分离带来了性能的提升 , 大大提高队列的吞吐量 。
【LinkedBlockingQueue详解】

推荐阅读