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"实例。一种保护读访问,一种保护写访问。