JUC知識點總結(四)五種單例模式的寫法

2021-10-04 05:31:30 字數 1431 閱讀 4908

餓漢式:

public

class

singleton

public

static singleton getinstance()

}

懶漢式(synchronized):
public

class

singleton

public

static

synchronized singleton getinstance()

return instance;

}}

懶漢式(雙重檢查鎖dcl,即 double-checked locking)
public

class

singleton

public

static singleton getinstance()

}}return instance;

}}

在單例的懶漢模式中,必須給例項新增volatile修飾符

原因:在構造例項時,物件引用指標的操作和初始化操作可能會被重排序, 這就導致在if(instance==null)的時候認為物件已經建立,但這個時候還沒有進行初始化

1.分配物件的記憶體空間2.初始化物件3.設定instance指向記憶體空間4.初次訪問物件

3和2可能會被重排序,導致1342這樣的問題。

解決辦法:①禁止重排序(volitale)②允許重排序但非構造執行緒不可見(static class)

懶漢式(靜態內部類)

public

class

singleton

public

static singleton getinstance()

private

static

class

singletonholder

}

虛擬機會保證乙個類的()方法在多執行緒環境中被正確地加鎖、同步,如果多個執行緒同時去初始化乙個類,那麼只會有乙個執行緒去執行這個類的()方法,其他執行緒都需要阻塞等待,直到活動執行緒執行()方法完畢。 (複習jvm類的初始化時機)

懶漢式(列舉)
public

enum singleton

}

優點:不僅能避免多執行緒同步問題,而且還自動支援序列化機制,防止反序列化重新建立新的物件,絕對防止多次例項化

缺點:不能通過反射來呼叫私有構造方法

總結: 餓漢方式絕對執行緒安全。明確要求實現 lazy loading 效果時,使用執行緒安全的懶漢式。如果涉及到反序列化建立物件時,可以嘗試使用列舉方式。如果有其他特殊的需求,可以考慮使用雙檢鎖方式。

單例集合知識點總結

package cn.itcast.map 單例集合 的體系 collection 單例集合的根介面 list 如果是實現了list介面的集合類,具備的特點 有序,重複。arrarylist 底層 是使用了object陣列實現的,特點 查詢速度快,增刪慢。linkedlist 底層是使用了鍊錶資料結...

Java單例模式和多例模式知識點總結

一 單例定義 單例 只存在乙個例項 分類 餓漢模式 和 懶漢模式 懶漢 只有第一次呼叫的時候會去建立乙個例項,後來呼叫的都是第一次建立的那個例項 餓漢 每一次呼叫都會去建立乙個例項 單例類的特點 1.構造私有 2.提供公共訪問入口 3.提供乙個私有的變數儲存當前例項 二 單例 package com...

C 知識點 單例模式的簡單實現

單例模式是最常見,也是使用最廣泛的一種設計模式,其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。1 使用乙個類的私有靜態指標指向該類的唯一乙個例項 2 使用乙個共有的靜態方法獲取該例項。include stdafx.h include using names...