确定它是否为锁类型(读或写)

时间:2011-03-25 13:28:10

标签: java locking

是否可以确定在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)。我需要先确定它是什么类型的锁......无论是读还是写......任何想法如何才能完成......?

2 个答案:

答案 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");
}

话虽如此,我同意彼得的观点,即如果不动态检查,可能会有更好的方法来达到你想做的目的。