單例中的多執行緒同步寫法與分析

2021-07-09 20:09:28 字數 862 閱讀 1457

在專案開發中,大多數人都會用到單例模式,單執行緒的常規單例模式寫法這裡不再贅述,這裡只是想對多執行緒的單例設計模式進行一下描述與分析,提到多執行緒,大家就會想到執行緒安全,因此所有人都會想到同步方法,確實應該放到同步方法中進行限制:

下面展示第一種同步方式:

public

class singleton

public synchronized static singleton getinstance()

return instance;

}

}

上面所展示的同步方式是將synchronized 關鍵字放到getinstance()方法上作為修飾符,這種方式確實可以保證執行緒安全,但是大家有沒有想過,為什麼要在多執行緒中保證執行緒安全,是想對誰進行同步,當然是單例這個物件,大家想一下,如果不進行同步會出現什麼情況,就是有可能出現建立多個例項,而非乙個唯一例項,因此同步的目的就是要保證物件的唯一性,而當物件已經建立完了之後,我們就不用擔心物件不唯一了,因此如果將synchronized 放到方法上就會出現不管是否已經建立好物件,所有執行緒當呼叫getinstance方法時都要有先後,這樣做是非常影響效率的。

因此正確的方法是:

public

class singleton

public

static singleton getinstance()

} }

return instance;

} }

看看這種方式是不是特別完美,當已經有單例物件了不用考慮執行緒安全問題,直接返回單例物件,當,沒有建立的時候,進行枷鎖同步,在同步**塊裡進行二次判斷,這樣大大的提高了效率。

單例與多執行緒

單例的兩種實現 1 立即載入 餓漢模式 public class singleton public static singleton getinstance 在方法呼叫之前,就已經建立好了例項,故不存在多執行緒安全的問題。2 延遲載入 懶漢模式 public class singleton publ...

多執行緒 單例模式與多執行緒

一 前言 如何使單例模式遇到多執行緒是安全的 正確的?我們在學習設計模式的時候知道單例模式有懶漢式和餓漢式之分。簡單來說,餓漢式就是在使用類的時候已經將物件建立完畢,懶漢式就是在真正呼叫的時候進行例項化操作。二 餓漢式 多執行緒 public class myobject public static...

單例模式與多執行緒

立即載入就是使用類的時候已經將物件建立完畢,常見的實現辦法就是直接new例項化,在呼叫方法前例項已經被建立了.利用getinstance 獲得乙個物件.延遲載入就是在呼叫get 方法時例項才被建立,常見的實現辦法就是在get 方法中進行new例項化,在呼叫方法時例項才被建立.利用get 獲得乙個物件...