标签:总结 返回 false 知识 后继 线程 true 节点
hasQueuedPredecessors()解析
判断队列是否有等待资料的线程
public final boolean hasQueuedPredecessors() {
//读取尾节点
Node t = tail;
//读取头节点
Node h = head;
//s是首节点h的后继节点
Node s;
return h != t &&
((s = h.next) == null || s.thread != Thread.currentThread());
}
- h != t 什么时候是false 就是首尾节点相同时
(1) 首尾节点都是空的 说明队列是空的,无须等待,返回true
(2) 首尾节点都不是空的 而且指向同一个内容,说明队列内只有一个节点,无须等待,返回false - h != t 什么时候是true 就是首尾节点不相同时,说明队列中至少有两个不同节点
- h != t 返回true,(s = h.next) == null返回true
因为在当前线程还在做尝试获取同步状态的操作时,已经有另一个线程准备入队了,当前线程慢人一步,自然就得去排队。 - h != t 返回true,(s = h.next) == null返回false,s.thread != Thread.currentThread()返回true。
(s = h.next) == null返回false表示首节点是有后继节点的。
s.thread != Thread.currentThread()返回true表示后继节点的相关线程不是当前线程,所以首节点虽然有后继节点,但是后继节点相关的线程却不是当前线程,那当前线程自然得老老实实的去排队。
标签:总结,返回,false,知识,后继,线程,true,节点 来源: https://www.cnblogs.com/cuiyf/p/14929619.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。