What is a proper/preferred way to annotate fields that are protected with a ReadWriteLock
so that tools like FindBugs can leverage the annotation? Should the name of the ReadWriteLock
simply be written in the @GuardedBy
annotation. Is there ever a reason to write the name of just the read lock, or just the write lock, in the @GuardedBy
annotation? Does FindBugs, or other tools, even support ReadWriteLock
in @GuardedBy
?
At the time of this writing, @GuardedBy
isn't fully implemented by Findbugs, and is mostly just for documentation. (It is partially implemented.)
I always use @GuardedBy("readwritelock")
or the object that I use to synchronize
.
For example of the latter:
class Example { private Object lock = new Object(); @GuardedBy("lock") private Stuff innards = ...; public void work() { synchronized(lock) { workWith(innards.goop()); } } }
Find bugs supports the following annotations:
net.jcip.annotations.GuardedBy net.jcip.annotations.Immutable net.jcip.annotations.NotThreadSafe net.jcip.annotations.ThreadSafe
Usage of these GuardedBy annotation should be as follows:
@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 ); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With