ReadWriteLock 读写锁
时间:2020-01-09 10:36:27 来源:igfitidea点击:
java.util.concurrent.locks.ReadWriteLock
是一种高级线程锁定机制。它允许多个线程一次读取某个资源,但一次只能写入一个资源。
这个想法是,多个线程可以从共享资源中读取而不会引起并发错误。并发错误首先发生在对共享资源的读取和写入同时发生,或者并发发生多次写入时。
在本文中,我仅介绍Java的内置" ReadWriteLock"。如果我们想了解有关实现ReadWriteLock背后的理论的更多信息,可以在Java Concurrency教程中的Read Write Locks中的文本中阅读它。
ReadWriteLock锁定规则
允许线程锁定" ReadWriteLock"以读取或者写入受保护资源的规则如下:
读取锁定</ b> | 如果没有线程锁定了“ ReadWriteLock”以进行写入,则 并且没有线程请求写入锁定(但尚未获得)。 > 因此,多个线程可以锁定该锁以进行读取。 |
写锁 </ b> | 如果没有线程正在读取或者写入。 因此,一次只能有一个线程可以锁定用于写入的锁。 |
ReadWriteLock实现
ReadWriteLock是一个接口。因此,使用ReadWriteLock
java.util.concurrent.locks
软件包包含以下ReadWriteLock
实现:
- ReentrantReadWriteLock
ReadWriteLock代码示例
这是一个简单的代码示例,显示了如何创建ReadWriteLock
以及如何将其锁定以进行读写:
ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); readWriteLock.readLock().lock(); // multiple readers can enter this section // if not locked for writing, and not writers waiting // to lock for writing. readWriteLock.readLock().unlock(); readWriteLock.writeLock().lock(); // only one writer can enter this section, // and only if no threads are currently reading. readWriteLock.writeLock().unlock();
注意," ReadWriteLock"实际上是如何在内部保留两个" Lock"实例。一种保护读访问,一种保护写访问。