Java ~ Collection/Executor ~ TransferQueue【总结】

33 篇文章 0 订阅
17 篇文章 0 订阅

一 概括


 简介

    TransferQueue(迁移队列)接口(下文简称迁移队列)是BlockingQueue(阻塞队列)接口的两大子接口之一,在原本的操作定义上新增了迁移操作的定义。所谓的迁移是一种作用于操作本身(或者说作用于执行操作的线程)的操作,与插入/放置操作非常类似,但阻塞条件不是没有剩余容量,而是迁移队列中没有阻塞的拿取者(执行移除/拿取操作的线程)。当一个迁移者(执行迁移操作的线程)执行迁移操作时,如果迁移队列中存在阻塞的拿取者,则将自身携带的元素迁移至拿取者令其完成移除/拿取操作(与此同时也意味着迁移操作的完成);否则将定时/永久阻塞至有拿取者可供元素迁移或直接返回false(迁移操作也存在多种形式的定义)。

    迁移队列的实现类不允许存null值,或者说BlockingQueue(阻塞队列)接口的所有的实现类都不允许存null值。null被poll()及peek()方法(两个方法由Queue(队列)接口定义)作为队列不存在元素的标记值,因此所有的BlockingQueue(阻塞队列)接口实现类都不允许存null值。

    迁移队列是线程安全的,或者说BlockingQueue(阻塞队列)接口的所有的实现类都是线程安全的(接口的定义中强制要求实现类必须线程安全)。

    迁移队列虽然与BlockingQueue(阻塞队列)接口一样都被纳入Executor(执行器)框架的范畴,但同时是Collection(集)框架的成员。

二 方法


 迁移

    迁移是迁移队列定义的核心操作,也是迁移队列存在的意义所在。所谓的迁移是一种作用于操作本身(或者说作用于执行操作的线程)的操作,与插入/放置操作非常类似,但阻塞条件不是没有剩余容量,而是迁移队列中没有阻塞的拿取者(执行移除/拿取操作的线程)。当迁移者(执行迁移操作的线程)执行迁移操作时,如果迁移队列中存在阻塞的拿取者,则将自身携带的元素迁移至拿取者令其完成移除/拿取操作(与此同时也意味着迁移操作的完成);否则将定时/永久阻塞至有拿取者可供元素迁移或直接返回false(迁移操作也存在多种形式的定义)。由于场景的多样性需求,迁移队列定义了该类操作三种形式的实现以供使用。

  • boolean tryTransfer(E e) —— 尝试迁移 —— 将元素迁移至等待中的拿取者。该方法是迁移操作"特殊值"形式的实现,如果迁移队列中已存在等待中的拿取者则将元素迁移并返回true;否则直接舍弃元素并返回false。

  • void transfer(E e) —— 迁移 —— 将元素迁移至等待中的拿取者。该方法是迁移操作"阻塞"形式的实现,如果迁移队列中已存在等待中的拿取者则将元素迁移并返回true;否则等待至有拿取者可供迁移。

  • boolean tryTransfer(E e, long timeout, TimeUnit unit) —— 尝试迁移 —— 将元素迁移至等待中的拿取者。该方法是迁移操作"超时"形式的实现,如果迁移队列中已存在等待中的拿取者则将元素迁移并返回true;否则等待指定时间至有拿取者可供迁移,超出指定时间直接舍弃元素并返回false。

 其它

    除了上述提及的迁移操作之外,迁移队列还定义了另外两个方法用于获取迁移队列的状态:

  • hasWaitingConsumer() —— 有等待中的消费者 —— 判断迁移队列中是否存在等待中的消费者,有则返回true;否则返回false;
  • getWaitingConsumerCount() —— 获取等待中的消费者总数 —— 获取迁移队列中等待中的消费者总数。

三 相关系列


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

说淑人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值