synchronized 컨텍스트 및 synchronized가 아닌 컨텍스트 모두에서 액세스하는 final이 아닌 필드를 보고합니다.
이 검사에서는 volatile 필드 및 생성자와 이니셜라이저의 액세스도 무시됩니다.
이처럼 '부분적으로 동기화된' 액세스는 보통 코딩 실수로 인한 결과이며 이로 인해 예기치 않은 데이터 구조의 불일치가 발생할 수 있습니다.
예:
public class Program {
Console console; // 경고: 'console' 필드는 동기화된 컨텍스트 및 동기화되지 않은 컨텍스트 모두에서 액세스할 수 있습니다
public synchronized void execute() {
console.print("running");
}
public void check() {
console.check();
}
}
간단한 getter 및 setter도 액세스로 간주할지 여부를 명시하는 옵션을 사용합니다.