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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举

發布時間:2025/4/16 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

懶漢式(線程安全,同步代碼塊)應用實例

優缺點說明

1) 這種方式,本意是想對第四種實現方式的改進,因為前面同步方法效率太低, 改為同步產生實例化的的代碼塊

2) 但是這種同步并不能起到線程同步的作用。跟第3種實現方式遇到的情形一 致,假如一個線程進入了if (singleton == null)判斷語句塊,還未來得及往下執行, 另一個線程也通過了這個判斷語句,這時便會產生多個實例

3) 結論:在實際開發中,不能使用這種方式



雙重檢查

SingletonTest06.java

package com.atguigu.singleton.type6;public class SingletonTest06 {public static void main(String[] args) {System.out.println("雙重檢查");Singleton instance = Singleton.getInstance();Singleton instance2 = Singleton.getInstance();System.out.println(instance == instance2); // trueSystem.out.println("instance.hashCode=" + instance.hashCode());System.out.println("instance2.hashCode=" + instance2.hashCode());}}// 懶漢式(線程安全,同步方法) class Singleton {private static volatile Singleton instance;private Singleton() {}//提供一個靜態的公有方法,加入雙重檢查代碼,解決線程安全問題, 同時解決懶加載問題//同時保證了效率, 推薦使用public static synchronized Singleton getInstance() {if(instance == null) {synchronized (Singleton.class) {if(instance == null) {instance = new Singleton();}}}return instance;} }

優缺點說明

1) Double-Check概念多線程開發中常使用到的,如代碼中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證線程安全了。

2) 這樣,實例化代碼只用執行一次,后面再次訪問時,判斷if (singleton == null),

? ? 直接return實例化對象,也避免的反復進行方法同步.

3) 線程安全;延遲加載;效率較高

4) 結論:在實際開發中,推薦使用這種單例設計模式



靜態內部類

SingletonTest07.java

package com.atguigu.singleton.type7;public class SingletonTest07 {public static void main(String[] args) {System.out.println("使用靜態內部類完成單例模式");Singleton instance = Singleton.getInstance();Singleton instance2 = Singleton.getInstance();System.out.println(instance == instance2); // trueSystem.out.println("instance.hashCode=" + instance.hashCode());System.out.println("instance2.hashCode=" + instance2.hashCode());}}// 靜態內部類完成, 推薦使用 class Singleton {//構造器私有化private Singleton() {}//寫一個靜態內部類,該類中有一個靜態屬性 Singletonprivate static class SingletonInstance {private static final Singleton INSTANCE = new Singleton(); }//提供一個靜態的公有方法,直接返回SingletonInstance.INSTANCEpublic static synchronized Singleton getInstance() {return SingletonInstance.INSTANCE;} }

優缺點說明

1) 這種方式采用了類裝載的機制來保證初始化實例時只有一個線程。

2) 靜態內部類方式Singleton類被裝載時并不會立即實例化,而是在需要實例化時,調用getInstance方法,才會裝載SingletonInstance類,從而完成Singleton的實例化。

3) 類的靜態屬性只會在第一次加載類的時候初始化,所以在這里,JVM保證了線程的安全性,在類進行初始化時,別的線程是無法進入的。

4) 優點:避免了線程不安全,利用靜態內部類特點實現延遲加載,效率高

5) 結論:推薦使用.



枚舉

SingletonTest08.java

package com.atguigu.singleton.type8;public class SingletonTest08 {public static void main(String[] args) {Singleton instance = Singleton.INSTANCE;Singleton instance2 = Singleton.INSTANCE;System.out.println(instance == instance2);System.out.println(instance.hashCode());System.out.println(instance2.hashCode());instance.sayOK();} }//使用枚舉,可以實現單例, 推薦 enum Singleton {INSTANCE; //屬性public void sayOK() {System.out.println("ok~");} }

優缺點說明

1) 這借助JDK1.5中添加的枚舉來實現單例模式。不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象。

2) 這種方式是Effective Java作者Josh Bloch 提倡的方式

3) 結論:推薦使用

總結

以上是生活随笔為你收集整理的单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

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