java常用阻塞队列

BlockingQueue 

获取元素的时候等待队列里有元素,否则阻塞 
保存元素的时候等待队列里有空间,否则阻塞 
用来简化生产者消费者在多线程环境下的开发 
ArrayBlockingQueue 
FIFO、数组实现 
有界阻塞队列,一旦指定了队列的长度,则队列的大小不能被改变 
在生产者消费者例子中,如果生产者生产实体放入队列超过了队列的长度,则在offer(或者put,add)的时候会被阻塞,直到队列的实体数量< 队列的初始size为止。不过可以设置超时时间,超时后队列还未空出位置,则offer失败。 
如果消费者发现队列里没有可被消费的实体时也会被阻塞,直到有实体被生产出来放入队列位置,不过可以设置等待的超时时间,超过时间后会返回null 


LinkedBlockingQueue 
FIFO、Node链表结构 
可以通过构造方法设置capacity来使得阻塞队列是有界的,也可以不设置,则为无界队列 
其他功能类似ArrayBlockingQueue 


PriorityBlockingQueue 
无界限队列,相当于PriorityQueue + BlockingQueue 
插入的对象必须是可比较的,或者通过构造方法实现插入对象的比较器Comparator<? super E> 
队列里的元素按Comparator<? super E> comparator比较结果排序,PriorityBlockingQueue可以用来处理一些有优先级的事物。比如短信发送优先级队列,队列里已经有某企业的100000条短信,这时候又来了一个100条紧急短信,优先级别比较高,可以通过PriorityBlockingQueue来轻松实现这样的功能。这样这个100条可以被优先发送 
SynchronousQueue 
无内部容量的阻塞队列,put必须等待take,同样take必须等待put。比较适合两个线程间的数据传递。异步转同步的场景不太适用,因为对于异步线程来说在处理完事务后进行put,但是必须等待put的值被取走。 

猜你喜欢

转载自blog.csdn.net/xiaobao5214/article/details/88308811