zoukankan      html  css  js  c++  java
  • AQS详解

    AQS依赖于一个FIFO队列和一个int表示的状态. 具体的实现类可以自己去保存别的状态, 但是只有这个int表示的状态是require和release的, 子类自己的状态是做辅助作用的.

    我们的同步器应该是通过把AQS的子类作为一个内部的代理类来实现,最好不要直接继承AQS,因为AQS的一些api最好不要暴露出去,容易被误用.

    AQS可以同时用来实现共享和非共享同步器. 他们共用一个FIFO queue

    AQS内部的ConditionObject类的作用是提供 Condition的作用

    对AQS的序列化只会序列化内部的int表示的状态,不会序列化queue,所以要想序列化,最好自己去做这方面的工作.

    想要使用AQS来作为一个同步器的基类,需要实现下面这几个方法.可以通过getState setState compareAndSetState 这些方法来对状态进行监控和修改

    * <li> {@link #tryAcquire}
    * <li> {@link #tryRelease}    
    * <li> {@link #tryAcquireShared}
    * <li> {@link #tryReleaseShared}
    * <li> {@link #isHeldExclusively}

    这些方法默认都是仍一个异常,这些方法的实现需要保证线程安全,一般需要最好比较短而且没有阻塞操作. 只要实现这些方法就好了, 其它方法都是final的.

  • 相关阅读:
    bzoj 3238
    bzoj 3473 后缀自动机多字符串的子串处理方法
    bzoj 2998 第k小字串
    bzoj 3672 利用点分治将CDQ分治推广到树型结构上
    bzoj 3671 贪心
    NOIP模拟题——nan
    NOIP模拟题——kun(栈)
    hduP2586——How far away ?
    DP习题
    NOIP模拟题——来自风平浪静的明天
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/7658505.html
Copyright © 2011-2022 走看看