AbstractQueuedSynchronizer笔记

Node的几个状态描述

	volatile int waitStatus;
	// 表示线程已取消
	static final int CANCELLED = 1;
	// 后继者的线程需要唤起
	static final int SIGNAL = -1;
	// 线程在等待条件
	static final int CONDITION = -2;
	// 下一个acquireShared应无条件传播
	static final int PROPAGATE = -3;

SIGNAL:此节点的后继者(或将很快)被阻止(通过驻留),因此当前节点在释放或取消时必须取消其后继节点。为了避免竞争,获取方法必须首先指示它们需要信号,然后重试原子获取,然后在失败时阻止。

CANCELED:由于超时或中断,此节点被取消。节点永远不会离开这种状态。特别是,具有已取消节点的线程永远不会再次阻塞。

CONDITION :此节点当前处于条件队列中。在传输之前,它不会用作同步队列节点,此时状态将设置为0.(此处使用此值与字段的其他用法无关,但可简化机制。)

PROPAGATE:releaseShared应该传播到其他节点。在doReleaseShared中设置(仅限头节点)以确保继续传播,即使其他操作已经介入。

0:以上都不是

这些值以数字方式排列以简化使用。非负值意味着节点不需要发信号。因此,大多数代码不需要检查特定值,仅用于符号。

对于正常的同步节点,该字段初始化为0,对于条件节点,该字段初始化为CONDITION。它使用CAS(或者在可能的情况下,无条件的易失性写入)进行修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值