J'utilise un bloc de code statique pour initialiser certains contrôleurs dans un registre que j'ai. Ma question est donc la suivante: puis-je garantir que ce bloc de code statique ne sera absolument appelé qu'une seule fois lors du premier chargement de la classe? Je comprends que je ne peux pas garantir quand ce bloc de code sera appelé, je suppose que c'est quand le Classloader le charge pour la première fois. Je me rends compte que je pourrais synchroniser sur la classe dans le bloc de code statique, mais je suppose que c'est en fait ce qui se passe de toute façon?
Un exemple de code simple serait;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
ou devrais-je faire cela;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}