單列模式的第二次加鎖的原因

2021-09-25 02:54:37 字數 559 閱讀 4633

單列模式的飽漢模式是被認為最安全的單列模式,先給出**:

public

class

singletone

public

static

getinstance()

}}return instance ;

}}

給唯一變數加volatile、判斷變數是否為null和加synchronnized這些都是必須的,但是為什麼要2次判斷變數是否為空呢?原因如下:

單例模式主要是用於執行緒安全中,當有多個執行緒來獲取單例物件時,首先都進行第一次的為null判斷,但是第一次取物件時,還沒有建立例項物件,當然為null。接著這些執行緒走到獲取鎖的步驟,產生鎖的競爭,乙個執行緒獲取到鎖後(其它的執行緒就在此步驟等待鎖的釋放),判斷物件是否為null,然後進行物件的new,接著釋放鎖。第二個執行緒獲取到上乙個執行緒釋放的鎖後,此時假設沒有第二次的為空判斷,那麼這第二個執行緒就會再次執行new的操作,這是我們不想要的結果,所以要加上這第二次的為null判斷。

第二次的作業

2 給出你的各項任務完成時間估算與實際消耗時間表。1估算計畫要10分鐘,實際20分鐘 2估算開發需要300分鐘,實際240分鐘 3估算分析需求需要10分鐘,實際10分鐘 4估算 規範需要60分鐘,實際90分鐘 5估算 複審需要10分鐘,實際5分鐘 6估算測試需要10分鐘,實際20分鐘 7估算合計需要...

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...

第二次約會

第一次看來我沒把人家姑娘嚇壞,一周後的乙個星期一晚上,我迎來了和t第二次見面機會,那天我發了一條簡訊給t,今天晚上我們去外灘逛逛吧 t快下班的時候給我打了個 當時t和她的小朋友們都還在教室裡,t很爽快的答應我的邀請,並且叫他們班所有的 學生異口同聲在 的那端大聲叫 叔叔好!當時差點沒把我耳朵震聾,呵...