FindBugsのようなツールが注釈を活用できるように、ReadWriteLock
で保護されているフィールドに注釈を付けるための適切/推奨される方法は何ですか? ReadWriteLock
の名前は、単に@GuardedBy
アノテーションで記述する必要があります。 @GuardedBy
注釈に読み取りロックのみ、または書き込みロックのみの名前を書き込む理由はありますか? FindBugsや他のツールは、@GuardedBy
のReadWriteLock
をサポートしていますか?
この記事の執筆時点では、_@GuardedBy
_ Findbugsによって完全に実装されているわけではありません であり、ほとんどがドキュメント用です。 (partially実装されています。)
私は常に@GuardedBy("readwritelock")
またはsynchronize
に使用するオブジェクトを使用します。
後者の例:
_class Example {
private Object lock = new Object();
@GuardedBy("lock")
private Stuff innards = ...;
public void work() {
synchronized(lock) {
workWith(innards.goop());
}
}
}
_
Find bugsは、次の注釈をサポートしています。
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 );
}
}