我正在使用静态代码块来初始化我拥有的注册表中的一些控制器。因此,我的问题是,我可以保证这个静态代码块在类第一次加载时绝对只会被调用一次吗?我知道我无法保证何时调用此代码块,我猜是 Classloader 第一次加载它的时间。我意识到我可以在静态代码块中的类上同步,但我猜这实际上是怎么回事?
简单的代码示例是;
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) {
// ...
}
}