Sto usando un blocco di codice statico per inizializzare alcuni controller in un registro che ho. La mia domanda è quindi: posso garantire che questo blocco di codice statico venga chiamato una volta sola quando la classe viene caricata per la prima volta? Capisco che non posso garantire quando verrà chiamato questo blocco di codice, immagino che sia quando Classloader lo carica per la prima volta. Mi rendo conto che potrei sincronizzarmi sulla classe nel blocco di codice statico, ma la mia ipotesi è che in realtà è quello che succede comunque?
Sarebbe un semplice esempio di codice;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
o dovrei farlo;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}