在Java多线程应用中,队列的使用率很高,Java提供的线程安全的Queue能够分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际须要选用阻塞队列或者非阻塞队列。安全
1)LinkedBlockingQueue 多线程
是一个阻塞的线程安全的队列,底层应该采用链表实现,LinkedBlockingQueue 能够指定容量,也能够不指定,不指定的话,默认最大是Integer.MAX_VALUE。线程
看其API的时候发现,添加元素的方法居然有三个:add,put,offer队列
add方法在添加元素的时候,若超出了度列的长度会直接抛出异常;rem
put方法若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素;io
offer方法在添加元素时,若是发现队列已满没法添加的话,会直接返回false。方法
从队列中取出并移除头元素的方法有:poll,remove,takeim
poll: 若队列为空,返回null;线程安全
remove:若队列为空,抛出NoSuchElementException异常;链表
take:若队列为空,发生阻塞,等待有元素。