LinkedBlockingQueue(FIFO)
    容量:默认取得是Integer.MAX_VALUE
    内部使用两把锁,所以使用AtomicInteger来计数保证原子性,出队入队用的不同的锁,互相不阻塞
    属性:

    AtomicInteger count 用来计数
    Node head 头节点,初始化的时候 last = head = new Node(null);来赋值head指向一个空的node节点
    Node last :尾节点,入队的时候 last = last.next = node

    出队的时候从头节点出队,把当前head=head.next, 吧head.item返回

    出队代码:

    1. private E dequeue() {
    2. // assert takeLock.isHeldByCurrentThread();
    3. // assert head.item == null;
    4. Node<E> h = head;
    5. Node<E> first = h.next;
    6. h.next = h; // help GC
    7. head = first;
    8. E x = first.item;
    9. first.item = null;
    10. return x;
    11. }

    入队代码:

    1. private void enqueue(Node<E> node) {
    2. // assert putLock.isHeldByCurrentThread();
    3. // assert last.next == null;
    4. last = last.next = node;
    5. }

    image.png