靜態(tài)代碼塊什么時(shí)候執(zhí)行 static變量什么時(shí)候初始化?
static變量什么時(shí)候初始化?只執(zhí)行一次復(fù)制:可以添加到學(xué)生類的構(gòu)造函數(shù)中,例如:運(yùn)行時(shí)會(huì)發(fā)現(xiàn)只打印一次大致原理:靜態(tài)變量是類變量,第一次使用類時(shí)只初始化一次。類裝入器中會(huì)有一個(gè)鎖,以防止類被多次初
static變量什么時(shí)候初始化?
只執(zhí)行一次
復(fù)制:
可以添加到學(xué)生類的構(gòu)造函數(shù)中,例如:
運(yùn)行時(shí)會(huì)發(fā)現(xiàn)只打印一次
大致原理:
靜態(tài)變量是類變量,第一次使用類時(shí)只初始化一次。類裝入器中會(huì)有一個(gè)鎖,以防止類被多次初始化。靜態(tài)字段和靜態(tài)代碼塊只執(zhí)行一次。從編譯器的角度來看,編譯時(shí)編譯器會(huì)按順序收集靜態(tài)字段和靜態(tài)代碼塊,然后將其放入生成的<cinit>特殊方法中,初始化類時(shí)會(huì)調(diào)用<cinit>方法。
應(yīng)用程序:
對(duì)于您的問題:
在前一個(gè)線程初始化之后,判斷它是否已成功初始化,并直接獲取結(jié)果
您的問題有點(diǎn)有趣。前一個(gè)線程的初始化可以說是取鎖,然后執(zhí)行鎖代碼。當(dāng)鎖退出時(shí),鎖代碼的結(jié)果將完全同步,這是鎖的一個(gè)特性(比如內(nèi)存可見性)。然后下一個(gè)場(chǎng)景就是正常的結(jié)果