通过组合上述操作,您可以安排仅有一个线程同时具有写访问权限,但是您可以让多个读取者同时读取,除非正在写入线程。
换句话说,每次要从结构中读取时,请使用读取锁定。每次要写入时,请使用写入锁定。这样,每当进行写入时,没有人在读取(您可以想象您拥有独占访问权限),但是只要没有人在写入,就可以有多个读取者同时读取。
ReadWriteLock
文档中已经明确说明:
一个ReadWriteLock维护一对相关的锁,一个用于只读操作,另一个用于写操作。 只要没有写入者,读取锁可以被多个读取线程同时持有。写锁是独占的。
因此,您可以同时拥有多个读取器,但只能有一个写入器 - 而且写入器也会阻止读取器进行读取。 如果您拥有一些资源可以安全地从多个线程读取,而且读取比写入更常见,则此功能非常有用,但当此资源实际上不是只读时。 (如果没有写入者并且读取是安全的,则根本不需要锁定。)
当一个线程获取WriteLock
时,其他线程无法获取同一实例的ReentrantReadWriteLock
的ReadLock
或WriteLock
,除非该线程释放锁。但是,多个线程可以同时获取ReadLock
。