我正在使用静态代码块来初始化注册表中的一些控制器。我的问题是,我能保证这个静态代码块只在第一次加载类时被绝对调用吗?我知道我不能保证代码块何时被调用,我猜测它是在类装入程序首次加载它时发生的。我意识到我可以在静态代码块中对类进行同步,但我猜这实际上已经发生了?一个简单的代码示例如下:
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
还是我应该这样做;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}