EN JP CN

JD.SYNC.IN

JD.SYNC.IN

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

脆弱性とリスク

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

軽減と防止

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

例 1

9      class MyClass {
10         private String name;
11         public MyClass() {
12             name = "";
13         }
14         synchronized public String getName() {
15             return name;
16         }
17         synchronized public void setName(String name) {
18             this.name = name;
19         }
20         public void foo(String x) {
21             name = x;
22         }
23     }

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