Java多线程之JUC包:AbstractQueuedSynchronizer(AQS)源码学习笔记
若有不正之处请多多谅解,并欢迎批评指正。 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5618628.html AbstractQueuedSynchronizer(AQS)是一个同步器框架,在实现锁的时候,一般会实现一个继承自AQS的内部类sync,作为我们的自定义同步器。AQS内部维护了一个state成员和一个队列。其中state标识了共享资源的状态,队列则记录了等待资源的线程。以下这五个方法,在AQS中实现为直接抛出异常,这是我们自定义同步器需要重写的方法: ①isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它。 ②tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败返回false。 ③tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败返回false。 ④tryAcquireShared(int):共享方式。尝试获取资源。成功返回true,失败返回false。 ⑤tryReleaseShared(int):共享方式。尝试释放资源,成功则返回true,失败返回false。 其中isHeldExclusively需要在使用Condition时重写