Estou usando um bloco de código estático para inicializar alguns controladores em um registro que tenho. Minha pergunta é, portanto, posso garantir que esse bloco de código estático seja absolutamente chamado apenas uma vez quando a classe for carregada pela primeira vez? Entendo que não posso garantir quando esse bloco de código será chamado, acho que é quando o Classloader o carrega pela primeira vez. Sei que poderia sincronizar a classe no bloco de código estático, mas acho que isso é realmente o que acontece, afinal?
Um exemplo de código simples seria;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
ou devo fazer isso;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}