使用java.util.concurrent.locks.ReadWriteLock进行@GuardedBy批注
什么是用ReadWriteLock
保护字段的正确/首选方式,以便像FindBugs这样的工具可以利用注释? ReadWriteLock
的名字应该只写在@GuardedBy
注释中。 是否有理由在@GuardedBy
注释中只写入读锁的名称,或只是写锁? FindBugs或其他工具是否支持@GuardedBy
ReadWriteLock
?
在写这篇文章的时候, @GuardedBy
没有完全实现@GuardedBy ,主要是为了文档。 ( 部分实施)
我总是使用@GuardedBy("readwritelock")
或我用来synchronize
的对象。
例如后者:
class Example { private Object lock = new Object(); @GuardedBy("lock") private Stuff innards = ...; public void work() { synchronized(lock) { workWith(innards.goop()); } } }
查找错误支持以下注释:
net.jcip.annotations.GuardedBy net.jcip.annotations.Immutable net.jcip.annotations.NotThreadSafe net.jcip.annotations.ThreadSafe
这些GuardedBy注释的使用应如下所示:
@ThreadSafe public class Queue<E> implements java.util.Queue<E> { private ConcurrentLinkedQueue readWriteLock; @GuardedBy( value="readWriteLock" ) public boolean offer(E o) { return queue.offer( o ); } }