假设我有一些 Java 代码:
public class SomeClass {
static {
private final double PI = 3.14;
private final double SOME_CONSTANT = 5.76;
private final double SOME_OTHER_CONSTANT = 756.33;
}
//rest of class
}
如果一个线程正在初始化 SomeClass 的 Class
对象,并且在第二个线程想要再次加载 SomeClass 的 Class
时正在初始化静态 block 中的值,那么发生在静态 block 上?即使第一个线程没有完成,第二个线程是否会忽略它假设它已经初始化?还是发生了其他事情?
最佳答案
如果第一个线程还没有完成 SomeClass 的初始化,第二个线程将阻塞。
这在 section 12.4.2 中的 Java 语言规范中有详细说明.
关于java - Java中静态 block 的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462697/