目 录CONTENT

文章目录

LinkedTransferQueue - 预占队列

FatFish1
2024-10-24 / 0 评论 / 0 点赞 / 67 阅读 / 0 字 / 正在检测是否收录...

概述

常用方法

  • boolean add(E e):队列会保存数据,不做阻塞等待。

  • void transfer(E e):是TransferQueue的特有方法。必须有消费者(take()方法调用者)。如果没有任意线程消费数据,transfer方法阻塞。一般用于处理及时消息。

由链表组成的无界队列,相比其他队列,多了transfer和tryTransfer方法。

这两个方法的作用是预占,即消费者取元素,队列非空,则直接取走数据,若队列为空,则生成一个节点入队(元素为null的节点),消费者线程被等待在这个节点上,后面生产者入队时发现有一个元素为null的节点,就不入队了,直接将元素填充到该节点上,同时唤醒这个节点上的消费线程

源码分析

Node

预占队列中的Node模型有如下属性:

final boolean isData;

当该node是消费者创建的null节点,这里是false,如果是生产者生成的节点,这里为true

0

评论区