final
的 @GuardedBy
注解。
在非 final 字段上进行保护可能会导致意外的竞争条件,因为该字段的值会被锁定(可能会变化),而不是锁定字段本身。
示例:
private ReadWriteLock lock = new ReentrantReadWriteLock(); //非 final 保护字段
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