Java 静态初始值设定项线程安全吗?
2022-08-31 07:59:35
我正在使用静态代码块来初始化我拥有的注册表中的一些控制器。因此,我的问题是,我能否保证在首次加载类时,此静态代码块将仅绝对调用一次?我知道我不能保证何时会调用此代码块,我猜它是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) {
// ...
}
}