Ben bir kayıt defterinde bazı denetleyicileri başlatmak için statik bir kod bloğu kullanıyorum. Benim sorum bu nedenle, bu statik kod bloğunun sınıf ilk yüklendiğinde yalnızca bir kez kesinlikle çağrılacağını garanti edebilir miyim? Bu kod bloğu çağrıldığında garanti edemez, Classloader ilk yüklediğinde onun tahmin ediyorum anlıyorum. Statik kod bloğundaki sınıfta senkronize edebileceğimin farkındayım, ama tahminim bu aslında ne oluyor?
Basit kod örneği;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
ya da bunu yapmalı mıyım;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}