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

AbstractQueuedSynchronized(AQS)学习笔记

时间:2016-06-26 22:26:57      阅读:807      评论:0      收藏:0      [点我收藏+]

标签:

AbstractQueuedSynchronized(AQS)是一个同步器框架,在实现锁的时候,一般会实现一个继承自AQS的内部类sync,作为我们的自定义同步器。以下这五个方法,在AQS中实现为直接抛出异常,这是我们自定义同步器需要重写的方法:

 

①isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它。

②tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败则返回false。

③tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败则返回false。

④tryAcquireShared(int):共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源。

⑤tryReleaseShared(int):共享方式。尝试释放资源,成功则返回true,失败则返回false。

其中isHeldExclusively需要在使用Condition时重写,他在AQS中的调用全部发生在其内部类ConditionObject的方法中。②③和④⑤分别对应了AQS定义的两种资源共享的方式:Exclusive&share,例如ReentrantLock就是一种独占锁,CountDownLatch和Semaphore是共享锁。注意,与CountDownLatch有一定相似性的CyclicBarrier严格意义上应该不属于共享锁,它没有自己的共享同步器,而是使用Lock和Condition来实现的,关于CyclicBarrier的详解可以参考本人的另一篇博文http://www.cnblogs.com/go2sea/p/5615531.html

 

AbstractQueuedSynchronized(AQS)学习笔记

标签:

原文地址:http://www.cnblogs.com/go2sea/p/5618628.html

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