Estoy usando un bloque de código estático para inicializar algunos controladores en un registro que tengo. Mi pregunta es, por lo tanto, ¿puedo garantizar que este bloque de código estático solo se invocará una vez cuando se cargue la clase por primera vez? Entiendo que no puedo garantizar cuándo se llamará a este bloque de código, supongo que es cuando el cargador de clases lo carga por primera vez. Me doy cuenta de que podría sincronizar en la clase en el bloque de código estático, pero supongo que esto es lo que sucede de todos modos.
Ejemplo de código simple sería;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
o debería hacer esto;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}