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

回到顶部