@GuardedBy annotations in which the guarding field
is not final.
Guarding on a non-final field may result in unexpected race conditions, as locks will be held on the value of the field (which may change), rather than the field itself.
Example:
private ReadWriteLock lock = new ReentrantReadWriteLock(); //not final guarding field
private Object state;
@GuardedBy("lock")
public void bar() {
state = new Object();
}
Supported @GuardedBy annotations are:
net.jcip.annotations.GuardedByjavax.annotation.concurrent.GuardedByorg.apache.http.annotation.GuardedBycom.android.annotations.concurrency.GuardedByandroidx.annotation.GuardedBycom.google.errorprone.annotations.concurrent.GuardedBy