Saya menggunakan blok kode statis untuk menginisialisasi beberapa pengontrol di registri yang saya miliki. Oleh karena itu, pertanyaan saya adalah, dapatkah saya menjamin bahwa blok kode statis ini hanya akan benar-benar dipanggil sekali ketika kelas pertama kali dimuat? Saya mengerti bahwa saya tidak dapat menjamin kapan blok kode ini akan dipanggil, saya menduga ketika Classloader memuatnya pertama kali. Saya menyadari bahwa saya dapat melakukan sinkronisasi di kelas dalam blok kode statis, tetapi tebakan saya apakah ini sebenarnya yang terjadi?
Contoh kode sederhana adalah;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
atau haruskah saya melakukan ini;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}