欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-17 19:39:36
在并发队列上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获取所有可用的数据对象(还可以指定获取数据的个数),通过该方法,可以提升获取数据效率;不需要多次分批加锁或释放锁。