비 스레드 안전 방식으로 초기화가 지연되는 static 변수를 보고합니다.

static 변수의 지연된 초기화는 서로 다른 스레드가 충돌하는 초기화를 수행하지 못하게 방지하기 위해 적절한 동기화 구성을 사용하여 수행해야 합니다.

해당되는 경우, 지연 초기화 holder 클래스 이디엄을 삽입하는 빠른 수정을 사용하는 것이 좋습니다. 이 관용구는 클래스가 사용되기 전에 초기화되지 않도록 JVM이 보장한다는 사실을 이용합니다.

예:


  class X {
    private static List<String> list;

    public List<String> getList() {
      if (list == null) {
        list = List.of("one", "two", "tree");
      }
      return list;
    }
  }

빠른 수정을 적용한 후:


  class X {
    private static final class ListHolder {
      static final List<String> list = List.of("one", "two", "tree");
    }

    public List<String> getList() {
      return ListHolder.list;
    }
  }