带有java.util.concurrent.locks.ReadWriteLock的@GuardedBy注释

时间:2011-10-19 17:35:08

标签: java concurrency annotations static-analysis findbugs

注释受ReadWriteLock保护的字段的正确/首选方法是什么,以便像FindBugs这样的工具可以利用注释? ReadWriteLock的名称是否应该只写在@GuardedBy注释中。是否有理由在@GuardedBy注释中只写入读锁定名称或只写写锁定? FindBugs或其他工具是否支持ReadWriteLock中的@GuardedBy

2 个答案:

答案 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 ); 
    }  

}