synchronized 컨텍스트 및 synchronized가 아닌 컨텍스트 모두에서 액세스하는 final이 아닌 필드를 보고합니다. 이 검사에서는 volatile 필드 및 생성자와 이니셜라이저의 액세스도 무시됩니다.

이처럼 '부분적으로 동기화된' 액세스는 보통 코딩 실수로 인한 결과이며 이로 인해 예기치 않은 데이터 구조의 불일치가 발생할 수 있습니다.

예:


  public class Program {
    Console console; // 경고: 'console' 필드는 동기화된 컨텍스트 및 동기화되지 않은 컨텍스트 모두에서 액세스할 수 있습니다

    public synchronized void execute() {
      console.print("running");
    }

    public void check() {
      console.check();
    }
  }

간단한 getter 및 setter도 액세스로 간주할지 여부를 명시하는 옵션을 사용합니다.