我有一类ReadWriteLock
和方法的一个子集开始与以下常见前奏:同步/锁定/ GuardedBy诠释锁定实例
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
。
考虑到这是java.util.concurrent类所使用的习惯用法,锁类的设计者,我会认为你不能做得更好。 – assylias