메서드에 사용된 synchronized 제어자를 보고합니다.

메서드에 synchronized 제어자를 사용하는 것이 좋지 않은 이유로는 다음과 같은 몇 가지가 있습니다.

  1. 잠금 상태에서는 최대한 적은 작업이 수행되어야 합니다. 그러므로 보통 synchronized 블록을 사용하여 공유 상태에서 작동하는 코드만 유지하는 것이 더 낫습니다.
  2. 동기화는 메서드의 인터페이스의 일부가 됩니다. 다른 잠금 메커니즘으로의 전환이 어려워집니다.
  3. 무엇이 특정 객체를 잠그고 있는지 추적하기가 힘들어집니다.
  4. DoS(서비스 거부) 공격은 메서드의 클래스를 상속받을 때 의도적으로 또는 자신도 모르게 실행이 가능해집니다.

그 대신 액세스를 완전히 제어할 수 있는 private final lock 객체에서 동기화를 고려할 수 있습니다.

synchronized(this)으로 메서드 본문을 래핑하는 빠른 수정이 제공됩니다.

예:


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

빠른 수정을 적용한 후:


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

이 검사에서 다음 옵션을 구성할 수 있습니다.

  1. 네이티브 메서드 포함- 네이티브 메서드를 검사의 범위로 포함합니다.
  2. 동기화된 메서드를 재정의하는 메서드 무시 - synchronized 메서드를 재정의하는 메서드를 보고하지 않습니다.