您的位置 首页 java

java初始化一个类的处理过程

  1. 第一阶段
    通过在Class对象上同步(即获取class对象上的锁),来控制类或者接口的初始化,这个获取锁的线程会一直等待,知道当前线程获取到这个初始化锁。
    假设Class对象当前没有被初始化,(初始状态为state,标记state =noInitialzation),且有两个 线程 AB同时试图初始化这个对象
java初始化一个类的处理过程

java初始化一个类的处理过程

  1. 第二阶段线程A执行类的初始化,同时B在初始化锁的condition上等待
java初始化一个类的处理过程

第三阶段,A设置state=initialized,然后唤醒在condition中等待的所有线程

B结束类的初始化处理

java初始化一个类的处理过程

T1:B获取初始化锁
T2:读取到state =initialized
T3:B释放初始化锁
T4:B的类初始化完成
线程A在第二阶段完成类的初始化,在第三阶段释放初始化锁。线程B在第四阶段获取同一个初始化锁,并在第四阶段B4之后开始访问这个类。根据JMM的锁规则,存在如下happens-before关系:
线程A执行类的初始化时的写操作,线程B一定能看到

文章来源:智云一二三科技

文章标题:java初始化一个类的处理过程

文章地址:https://www.zhihuclub.com/195796.shtml

关于作者: 智云科技

热门文章

网站地图