Java多線程通俗演義(三)---Java內存模型

JMM(java內存模型)關鍵詞:原子性、可見性、有序性

原子性:要麼不做,要麼做到最好(要麼全部執行,要麼全部回滾到最初)

方案:鎖機制、無鎖CAS機制

原因:多線程操作同時操作同一資源,無法保證原子性

可見性:兩個人面試一個崗位,你幹什麼事,我也得知道

方案:volatile、synchronized、鎖

原因:多線程操作變量是在不同的內存之中,如下圖:

有序性:爲了性能優化,編譯器和處理器會進行指令衝排序,有時候會改變程序語句的先後順序

public class Singleton {

    static Singleton instance;

    static Singleton getInstance(){

        if (instance == null) {

            synchronized(Singleton.class) {

                if (instance == null)

                 instance = new Singleton();

                                 }

                           }

                          return instance;

                   }

           }

對於instance=newSingleton();這條語句:

未編譯時:

  1. 指令1:分配一款內存M

  2. 指令2:在內存M上初始化Singleton對象

  3. 指令3:將M的地址賦值給instance變量

編譯後:

  1. 指令1:分配一塊內存S

  2. 指令2:將M的地址賦值給instance變量

  3. 指令3:在內存M上初始化Singleton對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章