單例雙重鎖線程不安全

這一行分爲三步操作 1.分配內存空間 2.初始化對象 3.instance引用指向內存空間   正常執行順序1、2、3 重排序後執行順序可能爲1、3、2 線程A執行1、3後讓出cpu,此時還未執行2,別的線程拿到cpu,發現instance不爲null,直接返回使用,就會有問題,因爲instance還未初始化。 加上volatile可以防止指令重排序,使執行順序一定爲1、2、3,保證線程安全 參考
相關文章
相關標籤/搜索