1. 程式人生 > >以單例模式為例,在Idea中多執行緒debug

以單例模式為例,在Idea中多執行緒debug

我們以單例模式的懶漢式在idea中進行多執行緒debug

一是可以學習多執行緒debug,二是可以瞭解懶漢式的執行緒不安全的原因

首先我們建立一個單例懶漢式,然後建立兩個執行緒

程式碼如下:

 

然後 進行多執行緒debug,來干預懶漢式的執行順序

首先我們應該在idea中開啟多執行緒debug模式:

         在斷點上點選右鍵,出現下圖

選擇Thread模式,即該斷點為多執行緒debug,每個斷點都要開啟

開啟後,我們執行debug

首先會執行Main執行緒, 然後我們在debug視窗中選擇執行緒:

        點選圖中箭頭指向的  下拉框選擇執行緒:

 我們首先選擇執行緒0:

 

 然後單步執行(F8) ,出現下圖,此時進入了if判斷例項是否為空

 

點選下一步出現下圖:

 

 現在我們切換到另一個執行緒:

點選下一步 ,執行緒2進入  if判斷

 點選下一步,進入 例項,但是注意:此時還沒有例項賦值

 

此時我們再切換到  執行緒1上,點選下一步

 

 點選下一步後,如下圖所示,此時執行緒1已經獲得 了例項  @506

 

此時 再切換到執行緒2上:此時發現執行緒2的例項也變為了  執行緒1中的例項 @506

接著我們再執行緒2中  點選下一步 進行例項化,此時發現,執行緒2中也進行了例項化,例項化為@507

我們再切換到 執行緒1上觀察,發現執行緒1也從@506變為了@507

最後 兩個執行緒都返回  @507這個例項

結論:

 有時候我們使用單例獲取兩個例項,表面上列印的是同一個物件,其實可能是建立了2個物件,然後第二個物件將第一個物件覆蓋了,造成了假象。