日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Java设计模式:单例模式

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java设计模式:单例模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學而時習,穩固而之心,

好久沒有復習java的知識了,今天有空溫習了單例模式,這里記錄一下

?

單例模式是常見的設計模式的一種,其特點就是 指一個類只有一個實例,且該類能自行創建這個實例? ,?

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點?

看到全局我想到了staic ,昨天晚上聽課學習,老師問這個是什么模式,有同學說是單例模式,都沒看到static 居然說單例,想想都可怕,我也是趕緊今天補充補充

下面看看單例的幾種寫法

第一種?餓漢模式

//餓漢模式
public class Singletion {//創建一個靜態的類并實例化private static Singletion instance = new Singletion();// 私有構造方法private Singletion() {}//獲取唯一可用的對象public static Singletion getInstance() {return instance;}public void Method(){System.out.println("單例模式學習");}}

調用

public class Main {public static void main(String[] args) {//獲取唯一可用的對象Singletion singletion = Singletion.getInstance();//顯示singletion.Method();}}

優點:餓漢模式天生是線程安全的,使用時沒有延遲。

?缺點:啟動時即創建實例,啟動慢,有可能造成資源浪費

第二種寫法:

懶漢模式(通常也叫飽漢模式)

// 懶漢模式(飽漢模式)
public class Singletion {//創建一個靜態的類private static Singletion singleton = null;// 私有構造方法private Singletion() {}//獲取唯一可用的對象public static Singletion getInstance() {if (singleton==null){singleton = new Singletion();}return singleton;}public void Method(){System.out.println("單例模式學習");}}

方法調用

public class Main {public static void main(String[] args) {//獲取唯一可用的對象Singletion singletion = Singletion.getInstance();//顯示singletion.Method();}}

優點:懶加載啟動快,資源占用小,使用時才實例化,無鎖。

缺點:非線程安全。

第三種寫法,懶漢添加鎖

懶漢模式(飽漢模式) --線程安全?

// 懶漢模式(飽漢模式) )--線程安全
public class Singletion {//創建一個靜態的類private static Singletion singleton = null;// 私有構造方法private Singletion() {}//獲取唯一可用的對象public static synchronized Singletion getInstance() {if (singleton==null){singleton = new Singletion();}return singleton;}public void Method(){System.out.println("單例模式學習");}}

懶加載啟動快,資源占用小,使用時才實例化,添加了鎖

缺點:synchronized 為獨占排他鎖,并發性能差。即使在創建成功以后,獲取實例仍然是串行化操作。

?

第四種寫法:

懶漢模式(飽漢模式) )--雙重加鎖檢查DCL(Double Check Lock)
// 懶漢模式(飽漢模式) )--雙重加鎖檢查DCL(Double Check Lock)
public class Singletion {//創建一個靜態的類private volatile  static Singletion singleton = null;// 私有構造方法private Singletion() {}//獲取唯一可用的對象public static  Singletion getInstance() {if (singleton==null){//同步塊,線程安全的創建實例synchronized (Singletion.class){//再次檢查實例是否存在,如果不存在才真的創建實例if (singleton ==null){singleton=new Singletion();}}}return singleton;}public void Method(){System.out.println("單例模式學習");}}

優點:懶加載,線程安全。

?注:實例必須有?volatile 關鍵字修飾,其保證初始化完全。

?

第五種寫法

Holder模式

// Holder模式
public class Singletion {/*** 類級的內部類,也就是靜態的成員式內部類,該內部類的實例與外部類的實例* 沒有綁定關系,而且只有被調用到才會裝載,從而實現了延遲加載*/private static class SingletionHolder {/*** 靜態初始化器,由JVM來保證線程安全*/private static Singletion instance = new Singletion();}/*** 私有化構造方法*/private Singletion() {}public static Singletion getInstance() {return SingletionHolder.instance;}public void Method() {System.out.println("單例模式學習");}}

?優點:將懶加載和線程安全完美結合的一種方式(無鎖)

?

參考連接

https://www.runoob.com/design-pattern/singleton-pattern.html

https://www.cnblogs.com/t0000/p/8250686.html

?

?

?

總結

以上是生活随笔為你收集整理的Java设计模式:单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。