是否可以确定在java中的readWritelock中读取或写入时锁类型是什么样的?
我有一个类似下面的功能
public Table getTableLocked(final Lock lock) throws FactFinderException {
boolean loadTable = true;
// Get the current table instance
TableManagementInfo table = TABLES.get(mapKey);
return table.instance;
}
在这种情况下,我传递一个Lock(ReadWriteLock)。我需要先确定它是什么类型的锁......无论是读还是写......任何想法如何才能完成......?
答案 0 :(得分:1)
您可以使用锁进行读取,写入或读写操作。所以没有办法知道Lock是一个还是另一个因为它们都是一样的。
在代码中使用锁通常是静态的,所以我认为没有充分的理由想要动态检查它。
编辑:例如,您可以使用ReentrantReadWriteLock支持使用ReadLock进行多次读取,并使用WriteLock支持单个编写器。这是解释名称的常见模式。但是说你想要多个作家和单个读者吗?您可以使用ReadLock进行写入,使用WriteLock进行读取。
当您执行读取或写入时,您应该知道,而不必检查您正在使用的锁类型。锁必须与您正在执行的操作相匹配。没有其他选择会给你正确的行为。
答案 1 :(得分:0)
您可以使用反射来确定您是ReadLock
还是WriteLock
。
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
...
if (lock instanceof ReadLock) {
System.out.println("Read");
} else if (lock instanceof WriteLock) {
System.out.println("Write");
}
话虽如此,我同意彼得的观点,即如果不动态检查,可能会有更好的方法来达到你想做的目的。