如何测试一个writelock是否被trylock锁定

时间:2015-05-30 17:58:54

标签: java multithreading concurrency

我需要做什么:一个方法获取读或写锁,另一个方法设置它是免费的。所以我一直在阅读并找到了ReentrantReadWriteLock,它有两个嵌套类,ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.WriteLock,据我所知,可以像这样获得:

 private final ReentrantReadWriteLock readWriteLock = new  ReentrantReadWriteLock();
private final Lock read = readWriteLock.readLock();
private final Lock write = readWriteLock.writeLock();

举个例子。所以我的理解是readlock()和writelock()是两个给出Lock对象的构造函数。我可以使用tryLock测试是否正在使用锁

我只是不明白如何知道是否存在锁定,而且如果可能的话,writeLock.trylock()似乎会获得它。 所以我可以这样做:

if (read.tryLock()) {
    read.unlock();
} else {
    return false;
}

它会尝试获取锁和"并立即返回值true"。但它仍然保持读锁定,所以我说,很好,我解锁它。

但那并不是我想要的,因为我只想释放之前由另一种方法设置的锁(如果它)。我不希望这种方法锁定任何东西,我希望它能够测试锁定,如果它已就位,则解锁。

执行此操作的不同方法(但我不知道是否有效):holdLock和isHeldByCurrentThread,用于Object和ReentrantLocks,我不知道,但我想另一种解决此问题的方法将创建两个reentrantLocks,使用一个作为写锁定,另一个作为读锁定,并使用isHeldByCurrentThread来检查我上面描述的内容(但是,我只是相信这一点,我真的不知道)。

对不起,如果它令人困惑,请让我澄清所需的一切,尽力解释这个问题。

0 个答案:

没有答案