보호하는 필드가 final이 아닌 @GuardedBy 어노테이션을 보고합니다.

final이 아닌 필드를 보호할 경우 필드 자체(변경 가능)가 아닌 필드 값이 잠금되므로 예기치 않은 경합 상태가 발생할 수 있습니다.

예:


    private ReadWriteLock lock = new ReentrantReadWriteLock(); // final이 아닌 보호하는 필드
    private Object state;

    @GuardedBy("lock")
    public void bar() {
        state = new Object();
    }

지원되는 @GuardedBy 어노테이션: