Java 如何测试writelock是否被trylock锁定

Java 如何测试writelock是否被trylock锁定,java,multithreading,concurrency,Java,Multithreading,Concurrency,我需要做的是:一个方法获取读或写锁,另一个方法将其释放。所以我一直在阅读并找到了ReentrantReadWriteLock,它有两个嵌套类,ReentrantReadWriteLock.ReadLock和ReentrantReadWriteLock.WriteLock,据我所知,可以这样获得: private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private final Lo

我需要做的是:一个方法获取读或写锁,另一个方法将其释放。所以我一直在阅读并找到了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()是两个提供锁对象的构造函数。我可以用tryLock测试锁是否被使用

只是我真的不明白如何知道是否有锁,如果可能的话,writeLock.trylock()似乎获得了锁。 所以我可以这样做:

if (read.tryLock()) {
    read.unlock();
} else {
    return false;
}
它将尝试获取锁并“立即返回值true”。但它仍然持有读取锁,所以我说,好吧,我解锁它

但这并不是我真正想要的,因为我只想释放之前由另一个方法设置的锁(如果是)。我不想让这个方法锁定任何东西,我想让它测试锁,如果它在适当的位置,解锁

不同的方法(但我不知道是否有效):holdsLock和isHeldByCurrentThread,用于对象和可重入锁,我真的不知道,但我想解决这个问题的另一种方法是创建两个可重入锁,一个用作写锁,另一个用作读锁,使用isHeldByCurrentThread仅检查我上面描述的内容(但是,我还是相信这一点,我真的不知道)


很抱歉,如果让人困惑,请让我澄清所需的任何内容,并尽力解释问题。

您无法解锁另一个线程拥有的锁,只有该线程才能解锁。如果当前线程拥有锁,则将其解锁。如果你不知道当前线程是否拥有锁,那么你就有一个设计问题。我明白你所说的@SotiriosDelimanolis,但是在解锁之前,我必须知道我是否拥有锁。如果是这样,我返回true,如果不是,我返回false。而且它是一个rmi环境,所以这些方法是远程调用的。是的,这可能是一个设计问题,但现在我看不到其他任何东西。我要重读一下文件摘要,以防万一可能会有帮助。哇,我已经读了太多次了,我的错。现在我在这里@SotiriosDelimanolis,在获取锁时,将某种类型的变量设置为一个值,然后在解锁之前,检查变量是否有意义?我没有实现它,因为它看起来太原始了,但即使使用RMI,我相信它也可以工作。谢谢你的帮助!另外,我知道没有isReadLockedByCurrentThread,因为它不是必需的,对吗?因为tryLock对他们每个人的工作方式不同,会不会是这样,@SotiriosDelimanolis?