对于 ReentrantLock,它是可重入的独占锁,内部的 Sync 类实现了 tryAcquire(int)、tryRelease(int) 方法,并用状态的值来表示重入次数,加锁或重入锁时状态加 1,释放锁时状态减 1,状态值等于 0 表示锁空闲 。
对于 CountDownLatch,它是一个关卡,在条件满足前阻塞所有等待线程 , 条件满足后允许所有线程通过 。内部类 Sync 把状态初始化为大于 0 的某个值 , 当状态大于 0 时所有wait线程阻塞,每调用一次 countDown 方法就把状态值减 1,减为 0 时允许所有线程通过 。利用了AQS的共享模式 。
现在,要用AQS来实现 ReentrantReadWriteLock 。
一点思考问题
* AQS只有一个状态,那么如何表示 多个读锁 与 单个写锁 呢?
* ReentrantLock 里,状态值表示重入计数 , 现在如何在AQS里表示每个读锁、写锁的重入次数呢?
* 如何实现读锁、写锁的公平性呢?
【java自旋锁代码大全 java自旋锁使用】关于java自旋锁代码大全和java自旋锁使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
- 使用redis实现分布式锁及其优化 redis分布式性能
- redis分布式锁死锁处理方案 redis宕机分布式锁
- redis incr锁 redis加锁方式
- java查询数组中是否包含某一个值 javamongodb数组查询
- redis实战电子书 redisjava书籍
- javaredis集群 javaredis列队
- 使用redis做分布式锁 redis设计分布式锁
- Redis队列排队 redis队列java
- mysql查询表死锁 mysql查询时锁定
- java mongodb aggregate mongodb的教程java
