Java中静态块的线程安全
假设我有一些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
对象,并且在第二个线程想要Class
再次加载SomeClass的过程中正在初始化静态块中的值,那么该静态块会怎样?即使第一个线程未完成,第二个线程是否仍假设它已初始化而忽略了它?还是发生其他事情?
回答:
如果第一个线程尚未完成对SomeClass的初始化,则第二个线程将阻塞。
Java语言规范的12.4.2节中对此进行了详细说明。
以上是 Java中静态块的线程安全 的全部内容, 来源链接: utcz.com/qa/413020.html