假设我有一些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的一个实例,并且在第二个线程实例化SomeClass的第二个实例时正在初始化静态块中的值,那么静态块会发生什么?第二个线程是否忽略它,假设它已经初始化,即使第一个线程没有完成?还是会发生其他事情?
如果第一个线程尚未完成初始化SomeClass,则第二个线程将阻塞.
这在Java语言规范的第12.4.2节中有详细说明.
静态类初始化保证Java是线程安全的.