我在一个类中有ReadWriteLock
,方法的一个子集从以下常见前奏开始:
rwLock.readLock().lock();
try {
...
} finally {
rwLock.readLock.unlock();
}
和方法的另一个子集使用相同的前奏,但这次使用writeLock()
代替。我发现这种编码风格相当冗长(丑陋?),我正在寻找一种通过注释的替代方式。 是否有任何同步注释我可以添加到我的方法/变量ala @Synchronized(rwLock.readLock())
或@Synchronized(rwLock.writeLock())
。
我发现Java EE中有@Lock
,但它有两个主要缺点:1)对于这样一个简单的要求,我不想从SE转移到EE和2)它不需要一个Lock
对象作为参数,并使用自己的ReadWriteLock
实例。
另一种方法是将Lock
封装到AutoClosable
中并使用try (AutoClosable acLock = new AutoClosableLock(lock)) { ... }
,它引入了一个虚拟变量(acLock
)并实例化一个新的AutoClosableLock
每一次。
答案 0 :(得分:0)
我倾向于使用synchronized,除非有一个非常好的理由不这样做。在这些相对罕见的情况下,我会按照您的建议使用Lock。我将代码封装在方法中,一旦它们工作,我就不再看它们了。我觉得所有代码都不需要看起来很漂亮的esp低级代码(在Java中很难做到的事情)