LinkedBlockingQueue
转: https://www.jianshu.com/p/fb79f074be28 数组的长度在创建时就必须确定,如果数组长度小了,那么ArrayBlockingQueue队列很容易就被阻塞,如果数组长度大了,就容易浪费内存。 而队列这个数据结构天然适合用链表这个形式,而LinkedBlockingQueue就是使用链表方式实现的阻塞队列。 一. 链表实现 1.1 Node内部类 /** * 链表的节点,同时也是通过它来实现一个单向链表 */ static class Node<E> { E item; // 指向链表的下一个节点 Node<E> next; Node(E x) { item = x; } } 有一个变量e储存数据,有一个变量next指向下一个节点的引用。它可以实现最简单地单向列表。 1.2 怎样实现链表 /** * 它的next指向队列头,这个节点不存储数据 */ transient Node<E> head; /** * 队列尾节点 */ private transient Node<E> last; 要实现链表,必须有两个变量,一个表示链表头head,一个表示链表尾last。head和last都会在LinkedBlockingQueue对象创建的时候被初始化。 last = head = new Node<E>(null); 注意这里用了一个小技巧