final 的 @GuardedBy 注解。
在非 final 字段上进行保护可能会导致意外的竞争条件,因为该字段的值会被锁定(可能会变化),而不是锁定字段本身。
示例:
private ReadWriteLock lock = new ReentrantReadWriteLock(); //非 final 保护字段
private Object state;
@GuardedBy("lock")
public void bar() {
state = new Object();
}
支持的 @GuardedBy 注解为:
net.jcip.annotations.GuardedByjavax.annotation.concurrent.GuardedByorg.apache.http.annotation.GuardedBycom.android.annotations.concurrency.GuardedByandroidx.annotation.GuardedBycom.google.errorprone.annotations.concurrent.GuardedBy