1. 程式人生 > >多執行緒下類的初始化過程

多執行緒下類的初始化過程

本文對Java多執行緒情況下類初始化過程中做一個總結

說明:Java語言規範規定,對於每一個類或者介面,都有一個唯一的初始化鎖與之對應

總結為4個階段

一、獲取Class物件的初始化鎖

    獲取Class物件的初始化鎖來控制類或者介面的初始化過程,這個鎖是執行緒阻塞的(即A獲取了鎖,B執行緒就會等待)

二、獲得了鎖的執行緒A進行初始化

    執行類的靜態初始化:

                                1.分配記憶體空間

                                3.地址賦值給引用變數

                                2.初始化物件

                注意:這裡雖然2.3重排序,但是其他執行緒不可見,這是處理器對其做的優化

三、執行緒A初始化完成,然後喚醒其他等待的執行緒

        這裡A的初始化處理過程完成

四、其他執行緒B結束

    其他執行緒B獲得鎖後,讀到類已經初始化過了,則結束