1

我有ReadWriteLock一个类和一个方法的子集以以下常见的前奏开始:

rwLock.readLock().lock();
try {
    ...
} finally {
    rwLock.readLock.unlock();
}

另一个方法的子集使用相同的前奏,​​但这次使用writeLock()。我发现这种编码风格非常冗长(丑陋?),并且正在通过注释寻找另一种方式。是否有任何同步注释可以添加到我的方法/变量 ala@Synchronized(rwLock.readLock())@Synchronized(rwLock.writeLock()).

我发现@Lock在 Java EE 中有一个,但它有两个主要缺点:1)对于这样一个简单的要求,我不想从 SE 移动到 EE 和 2)它不将Lock对象作为参数并使用它的自己的ReadWriteLock实例。

另一种选择是将 封装Lock到 an中AutoClosable并使用try (AutoClosable acLock = new AutoClosableLock(lock)) { ... },它引入了一个虚拟变量 ( ) 并每次acLock实例化一个新变量。AutoClosableLock

4

1 回答 1

0

我倾向于使用同步,除非有很好的理由不这样做。在这些相对罕见的情况下,我按照您的建议使用 Lock 。我将代码封装在方法中,一旦它们起作用,我就不会再看它们了。我不觉得所有代码都需要看起来很漂亮,尤其是低级代码(在 Java 中很难有效地做到这一点)

于 2013-08-05T08:11:41.423 回答