• 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的.

  • 相关阅读:
    iOS开发之--打印一堆奇怪东西的解决方案
    iOS开发之--从URL加载图片
    iOS开发之--搭建本地的SVN服务器
    HTML5
    swift
    swift
    HTML 换行
    HTML 注释
    HTML 水平线
    /etc/rc.d/rc.local
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/7658505.html
Copyright © 2020-2023  润新知