ReadWriteLock

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/readwritelock.html,人工翻译,仅供学习交流。

ReadWriteLock

readwritelock是一种高级的线程锁机制,它允许多个线程读取某个资源,但一次只能有一个线程写入它。
其思想是,多个线程可以同时从共享资源中读取,而不会导致并发性错误。并发错误首先发生在对共享资源的读写并发发生时,或者多个写入并发发生。
在本文中,我只介绍了Java内置的ReadWriteLock。如果您想了解更多关于ReadWriteLock实现背后的理论.。你可以在我的Java并发教程中读到Read - Write Locks

ReadWriteLock锁定规则

允许线程在读取或写入保护资源时锁定ReadWriteLock的规则如下 :

  • 读锁 如果没有线程锁定ReadWriteLock进行写操作,没有线程请求写锁(但尚未获得),因此,多个线程可以锁定用于读取的锁。
  • 写锁 如果没有线程正在读或写,因此,每次只有一个线程可以锁定写锁。

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

下一节:AtomicBoolean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值