当前位置:   article > 正文

ReadWriteLock_enterreadwritelock

enterreadwritelock

本文翻译自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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

请注意ReadWriteLock实际上是如何在内部保存两个Lock实例的。一个保护读访问,一个保护写访问。

下一节:AtomicBoolean
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/956184
推荐阅读
相关标签
  

闽ICP备14008679号