this または class 式での同期を報告します。 報告対象のコンストラクトには、synchronized ブロック、wait()notify() または notifyAll() の呼び出しが含まれます。

this または class 式での同期が良くない理由はいくつかあります。

  1. 同期がクラスの外部インターフェースに組み込まれるため、将来的に異なるロック機構に変更するのが難しくなる。
  2. 所定のオブジェクトをロックしているコードを単に追跡するのが難しくなる。
  3. サービス拒否攻撃の原因になり得る。意図的な場合もあれば、サブクラス化の際に偶発的に発生しやすくなる場合も考えられます。

代わりに、private final ロックオブジェクトでの同期を検討してください。この場合、ロックオブジェクトへのアクセスを完全に制御できます。

例:


  public void print() {
    synchronized(this) { // 警告: 'this' に対してロック操作を行うと、予期しない副作用が発生する可能性があります
      System.out.println("synchronized");
    }
  }