注释受ReadWriteLock
保护的字段的正确/首选方法是什么,以便像FindBugs这样的工具可以利用注释? ReadWriteLock
的名称是否应该只写在@GuardedBy
注释中。是否有理由在@GuardedBy
注释中只写入读锁定名称或只写写锁定? FindBugs或其他工具是否支持ReadWriteLock
中的@GuardedBy
?
答案 0 :(得分:31)
在撰写本文时,@GuardedBy
isn't fully implemented by Findbugs,主要用于文档编制。 (部分实施。)
我总是使用@GuardedBy("readwritelock")
或我使用的对象synchronize
。
例如后者:
class Example {
private Object lock = new Object();
@GuardedBy("lock")
private Stuff innards = ...;
public void work() {
synchronized(lock) {
workWith(innards.goop());
}
}
}
答案 1 :(得分:2)
查找错误支持以下注释:
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 );
}
}