AQS -> AbstractQueuedSynchronizer

  前言 :

  先说说这个 CLH锁:

   加锁

     1. 创建一个的需要获取锁的 Node

     2. 通过 CAS操作 让自己 成为这个尾部的节点,然后令 设置自己的pre

        3. 自旋,直到pre节点释放

   释放:

     1. 标记自己的状态为释放.

 正文:

  什么是在java里 AQS 是一个 抽象的同步队列.是的他是一个抽象类,他的子类要么用它实现了共享锁,要么实现了互斥锁.

  也因此,在他的主类里 并没有实现 protected boolean tryAcquire(int arg) { throw new UnsupportedOperationException(); } 这个方法, 延迟到子类.以实现区别.

       简单的说AQS 通过CAS维护 一个  <volatitle int state, exclusiveOwnerThread> 在表示目前是否有线程,以及哪个线程获取到了锁.

    具体的入队,出队.代码分析我写在这里 http://www.cnblogs.com/shuly/p/7235997.html

 

posted @ 2018-02-24 11:15  默默无语敲代码  阅读(200)  评论(0编辑  收藏  举报