发布于 2013-08-21 10:09:56
readLock.lock();
writeLock.lock();
将它们组合在一起,您可以一次只安排一个线程来进行写入访问,但是,除了一个线程正在写入之外,任意多的读者都可以同时阅读。
换个说法。每次您想要从结构中读取时,都使用read锁。每次您想要写时,都使用一个写锁。这样,每当一次写作发生时,没有人在阅读(你可以想象你有独占的权限),但是只要没有人在写作,就可以有很多读者同时阅读。
发布于 2013-08-21 10:00:25
ReadWriteLock的文档说明了这一点:
ReadWriteLock维护一对关联锁,一个用于只读操作,另一个用于写入.读取锁可以由多个读取器线程同时持有,只要没有写入器。写锁是唯一的。
所以你一次可以有很多读者,但只有一个作家--而且作家也会阻止读者阅读。如果您有一些可以安全地从多个线程读取的资源,而且读取比写入更常见,但是当资源实际上不是只读的时候,这是非常有用的。(如果没有作家,而且阅读是安全的,那么根本不需要锁。)
发布于 2013-08-21 10:02:09
当一个线程获得一个WriteLock时,其他线程都不能获取同一个ReentrantReadWriteLock实例的ReadLock或WriteLock,除非该线程释放锁。但是,多个线程可以同时获得ReadLock。
https://stackoverflow.com/questions/18354339
复制相似问题