單例和多例知識與實踐

2021-12-30 11:17:13 字數 1637 閱讀 7173

單例模式

兩種寫法:

一.懶漢式:

最簡單的寫法:怕多執行緒

中間的寫法:無法實現多執行緒

雙鎖的寫法:實現了執行緒安全,並保留了多執行緒。

特點:1、單例類只能有乙個例項。

2、單例類必須自己建立自己的唯一例項。

3、單例類必須給所有其他物件提供這一例項。

public class user

private static user user=null;

//靜態工廠方法

public static user getuser()

return user; } }以上懶漢式單例的實現沒有考慮執行緒安全問題,它是執行緒不安全的,併發環境下很可能出現多個user例項,要 實現執行緒安全如下 第一種在getuser方法上加同步:

public class user

private synchronized static user user=null;

//靜態工廠方法

public static user getuser()

return user; } }第二種是雙重檢查鎖定

package com.zhiyou100.model;

public class user

//3 建立我們的user工廠

public static user getuser() }}

return user;

//如果user等於空就建立乙個新的user,否則直接返回user

}二.餓漢式:

package com.zhiyou100.model;

public class user

//3 建立我們的user工廠

public static user getuser() } }

return user;

//如果user等於空就建立乙個新的user,否則直接返回user

}懶漢式和餓漢式的區別:

1.餓漢就是類一旦載入,就把單例初始化完成,保證getinstance的時候,單例是已經存在的了

懶漢比較懶,只有當呼叫getinstance的時候,才回去初始化這個單例。

2.執行緒安全:

餓漢式天生就是執行緒安全的,可以直接用於多執行緒而不會出現問題,

懶漢式本身是非執行緒安全的.

多例模式:

1 、多例類可以有多個例項

2 、多例類必須能夠自我建立並管理自己的例項,並向外界提供自己的例項。

public class people

public static people getpeople(string ***)

if(***.equals("woman"))

return null;

} } }執行緒安全的寫法:

package com.zhiyou100.model;

public class people

public static people getpeople(string ***) }

return man;

}else }

if(***.equals("woman")) }

return woman; }

else }

return null;

} }

單例和多例

單例模式 兩種寫法 一.懶漢式 最簡單的寫法 怕多執行緒 中間的寫法 無法實現多執行緒 雙鎖的寫法 實現了執行緒安全,並保留了多執行緒。特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。public class user private ...

spring 單例與多例

id student class com.ly.entity.student init method init destroy method destroy scope singleton bean scope prototype 為多例 預設單例模式 singleton 單例模式 框架啟動時,就例...

JavaSE 單例和多例

一 單例設計模式 定義 乙個類只能允許例項化乙個物件 餓漢式單例 public class test public static test getinstance public void print 特點 立即初始化 餓漢式單例 立即載入,執行緒安全,記憶體可能會浪費 懶漢式單例 public cl...