当前位置: 移动技术网 > IT编程>开发语言>Java > 并发编程(四)------并发quene

并发编程(四)------并发quene

2018年12月26日  | 移动技术网IT编程  | 我要评论
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue接口! ConcurrentLinkedQueue: 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发 ...

在并发队列上jdk提供了两套实现,一个是以concurrentlinkedqueue为代表的高性能队列,一个是以blockingqueue接口为代表的阻塞队列,无论哪种都继承自queue接口!

concurrentlinkedqueue:

  是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常concurrentlinkedqueue性能好于blockingqueue。它是一个基于链接节点的无界线程安全队列。

  该队列的元素遵循先进先出的原则,头是最先加入的,尾是最近加入的,该队列不允许null元素。

concurrentlinkedqueue重要方法:
add() 和 offer() 都是加入元素的方法 (在concurrentlinkedqueue中,这俩个方法没有任何区别)
poll() 和 peek() 都是取头元素节点,区别在于前者会删除元素,后者不会。

 


blockingqueue:

blockingqueue接口的重要方法

offer(anobject): 表示如果可能的话, 将anobject加到blockingqueue里,即如果blockingqueue可以容纳, 则返回true, 否则返回false.(本方法不阻塞当前执行方法的线程)

offer(e o, long timeout, timeunit unit), 可以设定等待的时间,如果在指定的时间内,还不能往队列中加入blockingqueue,则返回失败。

put(anobject): 把anobject加到blockingqueue里, 如果blockqueue没有空间, 则调用此方法的线程被阻断直到blockingqueue里面有空间再继续.

poll(long timeout, timeunit unit):从blockingqueue取出一个队首的对象,如果在指定时间内,队列一旦有数据可取,则立即返回队列中的数据。否则知道时间超时还没有数据可取,返回失败。

take(): 取走blockingqueue里排在首位的对象,若blockingqueue为空,阻断进入等待状态直到blockingqueue有新的数据被加入;

drainto(): 一次性从blockingqueue获取所有可用的数据对象(还可以指定获取数据的个数),通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。

 

  

 

 

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网