码迷,mamicode.com
首页 > 其他好文 > 详细

AQS

时间:2017-02-14 01:14:07      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:write   独占模式   lock   strong   read   pos   abstract   同步   down   

AQS(AbstractQueuedSynchronizer)顾名思义,抽象的队列同步器。

它是JUC中大部分同步工具的基础。如:CountDownLatch/FutureTask/ReentrantLock/RenntrantReadWriteLock/Semaphore。

它更是一个模板模式的典型应用。接下来就主要阐述这个模板的主要流程。

 

首先从结构来简单介绍一下AQS,代码如下

class aqs{
  // 表示线程对资源的占有状态
  int state;
  // 线程悬停队列的头指针与尾指针
    Node head;  
    Node tail;
  
  // 双向链表
  static class Node{
    
    int waitStatus;  /*
                  -1(SIGNAL): 表示下一个节点的线程需要被释放
                  1(CANCELLED): 当前节点的线程已被标志为退出状态
                  -2(CONDITION): 用于条件队列
                  -3(PROPAGATE): 共享状态的中间状态
                  0(None): None of the above
               */
    Node prev;
    Node next;
    Thread thread;
  }
}

 

刚刚就有提及AQS就是模板模式实现的。而模板模式最重要的就是流程的制定。而aqs的主流程:

 Acquire:
     while (!tryAcquire(arg)) {
        enqueue thread if it is not already queued;
        possibly block current thread;
     }

 Release:
     if (tryRelease(arg))
        unblock the first queued thread;

 

/**

  最重要的两个方法, 主流程

  

  独占模式与共享模式

  

  Condition

*/

 

AQS

标签:write   独占模式   lock   strong   read   pos   abstract   同步   down   

原文地址:http://www.cnblogs.com/w2154/p/6395887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!