@GuardedBy
注释用于实例字段和方法,其中保护符是 static
字段。 用 static 来保护非 static 可能会导致过度的锁争用,因为访问任何对象实例中的每个锁定字段将阻止同时访问每个对象实例中的字段。
示例:
private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static guarding field
private Object state;
@GuardedBy("lock")
public void bar() {
state = new Object();
}
支持的 @GuardedBy
注解是:
net.jcip.annotations.GuardedBy
javax.annotation.concurrent.GuardedBy
org.apache.http.annotation.GuardedBy
com.android.annotations.concurrency.GuardedBy
androidx.annotation.GuardedBy
com.google.errorprone.annotations.concurrent.GuardedBy