static フィールドであるインスタンスフィールドまたはメソッドに対して使用されている @GuardedBy アノテーションを報告します。 非 static のものを static でガードすると、過度なロックの競合を引き起こす可能性があります。任意のオブジェクトインスタンスのロックされているフィールドにアクセスがあると、すべてのオブジェクトインスタンスでそのフィールドへの同時アクセスが阻止されるためです。
例:
private static ReadWriteLock lock = new ReentrantReadWriteLock(); //static のガードしているフィールド
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