类和接口的初始化

时间:2012-07-17 04:56:21

标签: java

阅读JLS section 12.4.2后。

  

2.如果C的Class对象指示某个其他线程正在对C进行初始化,则释放LC并阻止当前线程,直到通知正在进行的初始化已完成,此时重复此步骤。

当前线程是否真的需要释放其他线程获取的LC?这个动作安全吗?在应用程序中会发生多少次类或接口的初始化?谢谢。

1 个答案:

答案 0 :(得分:4)

JVM的合同是,在允许任何应用程序线程使用该类之前,该类已完成加载。 “完成加载”意味着所有静态初始化程序都已完成(即所有静态块都已执行,静态字段按编码顺序初始化)

首次使用时会加载类,因此(隐式)发生的任何线程调用ClassLoader来加载类,并在ClassLoader完成加载类时阻塞(如上所述)。在加载类时,碰巧使用类的任何其他线程,也会阻止等待类完成加载。

每个JVM启动时都会加载一次类。


对学生的注意事项:是的,可以使用ClassLoader功夫来重新加载课程,但这种解释并没有误导。