メソッドの synchronized 修飾子を報告します。

メソッドの synchronized 修飾子が良くない理由はいくつかあります。

  1. ロック状態で実行する作業はできるだけ少なくする必要があります。 したがって、多くの場合は synchronized ブロックを使用して、共有状態で機能するコードのみを保持することをお勧めします。
  2. 同期はメソッドのインターフェースに組み込まれます。 その結果、異なるロック機構への移行が難しくなります。
  3. 所定のオブジェクトをロックしているコードを追跡するのが難しくなります。
  4. 意図的か偶発的かを問わず、メソッドのクラスを継承する際に DoS (サービス拒否) 攻撃が可能になります。

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

メソッド本体を synchronized でラップするためのクイックフィックスが提供されています。

例:


  class Main {
    public synchronized void fooBar() {
    }
  }

クイックフィックス適用後:


  class Main {
    public void fooBar() {
      synchronized (this) {
      }
    }
  }

このインスペクションでは、以下のオプションを構成できます。

  1. ネイティブメソッドを含める - ネイティブメソッドをインスペクションの範囲に含めます。
  2. synchronized メソッドをオーバーライドするメソッドを無視する - synchronized メソッドをオーバーライドするメソッドを報告しません。