정적 코드 블록을 사용하여 레지스트리의 일부 컨트롤러를 초기화하고 있습니다. 내 질문은 따라서이 정적 코드 블록이 클래스가 처음로드 될 때 절대적으로 한 번만 호출된다는 것을 보장 할 수 있습니까? 이 코드 블록이 언제 호출되는지 보장 할 수 없다는 것을 이해합니다. 클래스 로더가 처음로드 할 때 추측합니다. 정적 코드 블록의 클래스에서 동기화 할 수 있다는 것을 알고 있지만 실제로는 이것이 실제로 어떻게됩니까?
간단한 코드 예제는 다음과 같습니다.
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
아니면 내가해야합니까;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}