作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
哪个线程正在初始化静态字段和静态 block ?从我的实验中我得出结论,它与“调用”线程相同,即
class Foo {
static {
System.err.printf("static {}: %s\n", Thread.currentThread());
}
}
public class Mini_StaticInitialization {
public static void main(final String[] args) {
System.err.printf("main: %s\n", Thread.currentThread());
new Foo();
}
}
输出
main: Thread[main,5,main]
static {}: Thread[main,5,main]
是否有任何限制或总是如此?
最佳答案
通常静态字段在首先初始化类的线程中初始化,但我认为 JLS 中没有指定。
这通常也是加载类的同一个线程,但不一定。
JLS 最相关的部分可能是 12.4.2. Detailed Initialization Procedure :
Because the Java programming language is multithreaded, initialization of a class or interface requires careful synchronization, since some other thread may be trying to initialize the same class or interface at the same time.
这暗示(但不声明或要求)初始化发生在导致类需要初始化的线程中。
关于java - 哪个线程正在初始化静态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19444616/
我是一名优秀的程序员,十分优秀!