资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

知识总结-创新互联

专业从事成都网站设计、做网站,高端网站制作设计,成都微信小程序,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用H5网站设计+CSS3前端渲染技术,响应式网站开发,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。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());
}
  1. h != t 什么时候是false 就是首尾节点相同时
    (1) 首尾节点都是空的 说明队列是空的,无须等待,返回true
    (2) 首尾节点都不是空的 而且指向同一个内容,说明队列内只有一个节点,无须等待,返回false
  2. h != t 什么时候是true 就是首尾节点不相同时,说明队列中至少有两个不同节点
  3. h != t 返回true,(s = h.next) == null返回true
    因为在当前线程还在做尝试获取同步状态的操作时,已经有另一个线程准备入队了,当前线程慢人一步,自然就得去排队。
  4. h != t 返回true,(s = h.next) == null返回false,s.thread != Thread.currentThread()返回true。
    (s = h.next) == null返回false表示首节点是有后继节点的。
    s.thread != Thread.currentThread()返回true表示后继节点的相关线程不是当前线程,所以首节点虽然有后继节点,但是后继节点相关的线程却不是当前线程,那当前线程自然得老老实实的去排队。

当前标题:知识总结-创新互联
URL分享:http://cdkjz.cn/article/ijiie.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220