이중 검사된 잠금을 보고합니다.

이중 검사된 잠금은 동기화 비용을 줄이는 한편 스레드가 안전한 방식으로 요청 기반의 필드 초기화를 시도합니다. 안타깝지만 이 방식이 volatile로 선언되지 않은 필드에서 사용될 경우 스레드 안전하지 않습니다. Java 1.4 또는 이전 버전을 사용할 경우 이중 검사된 잠금은 volatile 필드에서도 작동하지 않습니다. 해당 문제와 관련한 자세한 설명은 위에 링크된 글을 참조하세요.

예:


  class Foo {
      private Helper helper = null

      Helper getHelper() {
          if (helper == null)
              synchronized(this) {
                  if (helper == null) {
                      helper = new Helper()
                  }
              }
          }
          return helper;
      }
  }