ReentrantReadWriteLock在同一个线程上

时间:2017-08-31 06:31:36

标签: java multithreading

我有这个(简化)场景:

@Test
public void testSameThread() throws InterruptedException {
    ReentrantReadWriteLock rwlock = new ReentrantReadWriteLock();
    rwlock.readLock().lock();
    {
        if (rwlock.writeLock().tryLock(50, TimeUnit.MILLISECONDS)) {
            // long-running op
            Thread.sleep(100);
            rwlock.writeLock().unlock();
        } else {
            fail();
        }
    }
    rwlock.readLock().unlock();
}

首先,我获取了一个读锁,然后在SAME线程上我尝试获取写锁。我的假设是,当我在同一个线程上时,应该获取写锁定。

首先,我的假设出了什么问题?那么,可以使用什么模式(标准Java锁定机制)来允许同一线程的任意嵌套读/写锁?

1 个答案:

答案 0 :(得分:1)

你的假设没有错。事实上,这不是一个假设,它是一个记录良好的事实。来自ReentrantReadWriteLock.WriteLock.lock()

  

如果另一个线程

不保持读取和写入锁定,则获取写入锁定

如果在同一个帖子上多次获取时被阻止,则不会是可重入的。

¹事实上,事实上没有那么好记录,请参阅评论部分