JD.SYNC.IN

JD.SYNC.IN は、クラスが自分自身のフィールドを整合しない方法で使用している場合に検出されます。"不整合" とは、保護された使用数がすべての使用数の 66% を超えていることを意味します。このエラーは、フィールドの使用カウントが 3 を超えた場合に報告されます。これらの値はチェッカーのパラメーターであり、変更可能です。

脆弱性とリスク

整合しない同期化は、競合状態を引き起こす可能性があります。

軽減と防止

フィールドは、常に同一のロックで同期化するか、まったく同期化しないでください。不完全な同期化は、競合状態問題の根本原因です。

例 1

コピー
      class MyClass {
         private String name;
         public MyClass() {
             name = "";
         }
         synchronized public String getName() {
             return name;
         }
         synchronized public void setName(String name) {
             this.name = name;
         }
         public void foo(String x) {
             name = x;
         }
     }

JD.SYNC.IN が 10 行目のフィールド宣言に対して報告されています。'name' フィールドが整合しない方法で同期化されています。