锁定实例上的同步/锁定/ GuardedBy注释

时间:2013-08-05 07:57:40

标签: java concurrency annotations locking

我在一个类中有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每一次。

1 个答案:

答案 0 :(得分:0)

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