003并发容器类-并发Queue接口

JDK提供两套并发队列实现,一个是ConcurrentLinkedQueue为代表的高性能队列,另一个是以BlockingQueue接口为代表的阻塞队列,他们都继承自Queue接口;

ConcurrentLinkedQueue(线程安全的无界无阻塞队列):是一个适合高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue,ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列;该队列的元素遵循先进先出原则,即头元素为最先加入,尾部元素为最近加入,该队列不允许加入null元素。

ConcurrentLinkedQueue重要方法:

1.add()和offer()都是加入元素的方法(在ConcurrentLinkedQueue中,这两个方法没有区别);

2.poll()和peek()都是获取头元素节点的方法,区别在于poll()方法获取元素后同时删除元素,即取走;而peek()方法只是获取元素。

BlockingQueue接口(线程安全的阻塞队列接口)

BlockingQueue接口的重要方法:

1.offer(anObject):如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false。(此方法不阻塞当前执行方法的线程)

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

3.put(anObject)把anObject加到BlockingQueue里,如果BlockingQueue没有空间,则调用此方法的线程被阻塞直到BlockingQueue有空间在继续。

注意:put方法添加元素会阻塞线程,而offer方法不会阻塞线程而是直接返回成功或失败。

4.poll(long timeout,TimeUnit unit),从BlockingQueue取出一个队首的对象,如果在指定时间内,队列有数据可取,则立即返回队列中的数据,否则直到超时还没有数据可取,则返回失败。

5.take()取走BlockingQueue中排在首位的对象,若BlockingQueue为空,阻塞线程进入等待状态直到BlockingQueue有新的数据被加入后,取走线程结束;

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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值