ReentrantReadWriteLock
读写者模型:
读写锁运行同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程以及其他写线程均会被阻塞(读锁不等于无锁)
写锁——独占锁
写锁的获取——tryAcquire(int acquires)
如何区分读状态与写状态:
同步状态高16位表示读锁获取次数,低16位表示写锁获取次数
写锁释放——重写AQS的tryRelease方法
读锁——共享锁(一般与独占锁搭配使用实现读写者模型)
读锁获取——tryAcquireShare
只要当时没有写线程获取到锁并且读锁的获取次数
不超过最大值,读锁就能获取成功
读写锁的应用场景:缓存的实现
写锁的降级
写锁可以降级为读锁,但是读锁不能升级为写锁