Ich verwende einen statischen Codeblock, um einige Controller in einer Registrierung zu initialisieren, die ich habe. Meine Frage ist daher, kann ich garantieren, dass dieser statische Codeblock beim ersten Laden der Klasse nur einmal unbedingt aufgerufen wird? Ich verstehe, dass ich nicht garantieren kann, wann dieser Codeblock aufgerufen wird. Ich schätze, es ist, wenn der Classloader ihn zum ersten Mal lädt. Mir ist klar, dass ich die Klasse im statischen Codeblock synchronisieren kann, aber ich vermute, dass dies tatsächlich sowieso passiert?
Ein einfaches Codebeispiel wäre;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
oder sollte ich das tun;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}