• 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 然后进行阻塞 等待获取锁成功

  • 相关阅读:
    安装VC6.0遇到的问题
    开发、测试环境
    OPENGL绘制文字
    C++实现文件关联
    MFC多国语言——配置文件
    MFC 资源记录
    如何解决——汉化英文界面出现乱码
    项目配置——添加第三方资源
    队列&生产者消费者模型
    抢票小程序
  • 原文地址:https://www.cnblogs.com/isnotnull/p/14650653.html
Copyright © 2020-2023  润新知