如果 获取 读锁的时候 有写锁 是直接获取不了
还是说 等写锁释放了 继续去获取读锁.
类似 线程里面的wait ?
哪里有源码说明吗,
读写锁:ReentrantReadWriteLock
如果有很多线程从一个数据结构中读取数据,而很少的线程修改数据,那么就用读写锁。
分别得到读锁和写锁:
ReentrantReadWriteLock rrwl=new ReentrantReadWriteLock();
ReadLock readL = rrwl.readLock();
WriteLock writeL = rrwl.writeLock();
读锁与读锁不互斥,读锁与写锁互斥,写锁与写锁互斥。
用于优化性能,提高读写速度。
去找几个多线程读写锁就可以很清楚明白了
有独占锁 ,也有读 共享锁,不同的应用的场景,机制不一样
各位还是没正面回答我的问题呀
写锁释放了 继续去获取读锁
在两个释放锁的方法(unlockRead,unlockWrite)中,都调用了notifyAll方法,而不是notify。
如果用的是notifyAll方法,所有的线程都会被唤醒,然后判断能否获得其请求的锁。
用notifyAll还有一个好处。如果有多个读线程在等待读锁且没有线程在等待写锁时,调用unlockWrite()后,所有等待读锁的线程都能立马成功获取读锁 —— 而不是一次只允许一个
这篇文章讲的非常清晰 你可以去看看http://ifeve.com/read-write-locks/