1. 程式人生 > >沒理解double check lock的問題

沒理解double check lock的問題

嗯,看了些連結

還是沒想明白就算第一個執行緒中建立物件與給引用賦值的順序反了,難道syschronized關鍵字不能保證這兩個操作都執行完之後在刷到主記憶體嗎?

在第一個執行緒執行過程中,第二個執行緒讀取主記憶體中的引用,因該還是為null的阿

之後再去更新主記憶體。

唉,有人指點下就好了

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

恩,這是我半年多前的問題,現在已經搞明白了。這個問題其實說得是執行緒A正在執行instance = new Instance()的操作,而執行緒B開始執行if(instance==null)的判斷,當不存在volatile保證執行緒可見性以及 保證建構函式在整個物件構造完成前執行完畢    的時候,執行緒B可能會看到一個不完整的instance物件,因為java的某些實現會在記憶體中開闢一片儲存物件的區域後直接返回記憶體的引用,所以執行緒B判斷不為null。從而得到不完整的物件。