• AQS中 state 和 waitStatus 分别是干什么的?


    AQS(AbstractQueuedSynchronizer)中,statewaitStatus是用于管理线程等待和唤醒的重要字段。

    1. statestate字段表示共享资源的状态或计数。它是AQS的核心字段之一,用于控制线程的访问和操作。具体来说,state字段的含义和用途是由具体的同步器实现决定的。例如,在ReentrantLock中,state表示锁的持有计数,而在CountDownLatch中,state表示还需要等待的计数。

      线程在尝试获取锁或访问共享资源时,会先检查state字段的值,根据具体的实现逻辑进行相应的操作。如果state字段的值符合线程要求,则线程可以继续执行;否则,线程可能会进入等待状态。

    2. waitStatuswaitStatus字段用于表示节点在等待队列中的状态。它是Node类中的一个字段,在AQS中用于构建等待队列和条件队列。

      waitStatus字段的具体取值有以下几种:

      • CANCELLED:表示节点已被取消,即等待超时或被中断。
      • SIGNAL:表示后继节点的线程需要被唤醒,即当前节点释放锁或资源时需要唤醒后继节点。
      • CONDITION:表示节点当前在条件队列中等待。
      • PROPAGATE:表示需要将releaseShared操作传播到其他节点。
      • 0:表示节点没有特殊状态。

      通过对waitStatus字段的设置和检查,AQS可以控制线程的等待和唤醒。例如,在acquire方法中,线程会首先检查节点的waitStatus字段,如果需要等待,则线程会进入等待状态;当其他线程释放锁或资源时,会修改相应节点的waitStatus字段,并唤醒等待的线程。

    总结起来,state字段用于表示共享资源的状态或计数,而waitStatus字段用于表示节点在等待队列中的状态,通过这两个字段,AQS可以实现线程的等待和唤醒机制。




    链接:https://www.jianshu.com/p/91c33082d24a

  • 相关阅读:
    金仓数据库 KingbaseES 插件参考手册 plsql_plprofiler
    14、三维表面重建-DeepSDF
    Spring——》事务的隔离级别
    【ai】李沐 动手深度学学v2 环境安装:anaconda3、pycharm、d2
    java:CompletableFuture的简单例子
    阿里首席架构师解读:Spring Cloud 与 Docker 微服务架构实战
    深度解析单例模式
    噪声系数与插入损耗
    Vue的数据控制-----计算属性(computed)&&侦听器(watch)
    python爬虫之selenium知识点记录
  • 原文地址:https://blog.csdn.net/wppwpp1/article/details/133648561