zoukankan      html  css  js  c++  java
  • java-condition

    await方法:

      1. 线程中断之后再调用await会直接抛异常

      2. 将当前线程包装成一个node放入条件队列中 如果条件队列的尾节点是取消状态 当前线程会把所有取消状态的节点在条件队列中出队

      3. 完全释放锁

      4. 判断如果当前node是在条件队列中的话就挂起当前线程等待被signal被唤醒

      5. 当线程被唤醒

        5.1 被外部线程中断唤醒 会直接进入阻塞队列 然后在调用acquireQueued方法时被park 等待被唤醒获取到锁

        5.2 被signal唤醒 也会在调用acquireQueued方法时被park 等待被唤醒获取到锁

      6. 如果是在条件队列中被中断的await会抛出异常 如果在条件队列外被中断 会设置线程中断为true

    signal方法:

      1. 未持锁线程唤醒会抛异常

      2. 迁移条件队列中的第一个node 如果返回false继续唤醒下一个node

      3. 迁移node到阻塞队列使用完整入队 如果迁移到阻塞队列后的前置节点是取消状态就唤醒当前node 去调用shouldParkAfterFailedAcquire方法 跳过取消的node 然后进行阻塞 等待获取锁成功

  • 相关阅读:
    angular2中*ngFor同时适用*ngIf
    win10 正确安装node-sass方式
    ios10禁止用户缩放
    ubuntu切换全屏
    编译scss文件夹
    清除select中的三角形(下拉)
    js中的!!
    scss封装css3兼容性
    js获取当前时间
    Sql Server 数据分页
  • 原文地址:https://www.cnblogs.com/isnotnull/p/14650653.html
Copyright © 2011-2022 走看看