今天复习了队列,做个小结,方便自己回顾,有不足的还请路过的大侠多多指教,纯属个人学习,谢谢;
1、PriorityBlockingQueue优先级阻塞队列,每次都是最小的id在最前面,如下所示:
[0, 2, 1, 5, 4] ---原队列
0 ---被take()1个侯
[1, 2, 4, 5]
1 ---被take()2个侯
[2, 5, 4]
2 ---被take()3个侯
[4, 5]
2、ConcurrentLinkedQueue多个线程无界线程安全队列,遵循先进先出,不允许null元素;
ConcurrentLinkedQueue<String> strQ=new ConcurrentLinkedQueue<String>();
3、ArrayBlockingQueue阻塞式队列
add()已经满了时抛出一个异常。不会阻塞。
offer()已经满了时,返回false。不会阻塞。
put()已经满了时,会进入等待,只要不被中断,就会插入数据到队列中。会阻塞,可以响应中断。
remove()假如对列为空,则抛出异常。
poll()假如对列为空,返回false。不会阻塞。
take()假如对列为空,会进入等待,会阻塞,可以响应中断。
peek()假如对列为空,返回NULL,不会删除队列中的元素
4、LinkedBlockingQueue阻塞的线程安全的队列,默认大小Integer.MAX_VALUE,不允许null
add()方法在添加元素的时候,若超出了度列的长度会直接抛出异常.
put()方法,若向队尾添加元素的时候发现队列已经满了会发生阻塞一直等待空间,以加入元素.
offer()方法在添加元素时,如果发现队列已满无法添加的话,会直接返回false.
poll() 若队列为空,返回null。
remove()若队列为空,抛出NoSuchElementException异常。
take()若队列为空,发生阻塞,等待有元素。
peek()若队列为空,返回null,获取元素不会删除队列元素
5、SynchronousQueue
直接add()数据会报一场IllegalStateException: Queue full
直接offer()也无法添加如数据
必须take()数据的同时等待加入数据,该队列不保留数据;
6、LinkedBlockingDeque双向并发阻塞队列
两边入两边出提供方法addfist(),offerlast(),pollfist(),peeklast().....