欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

線程安全的單例模式的幾種實現(xiàn)方法分享

 更新時間:2014年02月18日 09:37:24   作者:  
線程安全的單例模式實現(xiàn)有幾種思路,個人認為第2種方案最優(yōu)雅:、餓漢式、借助內(nèi)部類、普通加鎖解決、雙重檢測,但要注意寫法,如果單體模式繼續(xù)擴展為N元單體模式,那就是對象池模式了

1、餓漢式單例

復制代碼 代碼如下:

public class Singleton {
   private final static Singleton INSTANCE = new Singleton();

   private Singleton() { }

   public static Singleton getInstance() {
      return INSTANCE;
   }
}

2、借助內(nèi)部類
屬于懶漢式單例,因為Java機制規(guī)定,內(nèi)部類SingletonHolder只有在getInstance()方法第一次調(diào)用的時候才會被加載(實現(xiàn)了lazy),而且其加載過程是線程安全的。內(nèi)部類加載的時候?qū)嵗淮蝘nstance。

復制代碼 代碼如下:

public class Singleton {

   private Singleton() { }

   private static class SingletonHolder {
      private final static Singleton INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.INSTANCE;
   }
}

3、普通加鎖解決

復制代碼 代碼如下:

public class Singleton {
   private static Singleton instance = null;

   private Singleton() { }

   public static synchronized Singleton getInstance() {
      if(instance == null) {
         instance = new Singleton();
      }

      return instance;
   }
}

雖然解決了線程安全問題,但是每個線程調(diào)用getInstance都要加鎖,我們想要只在第一次調(diào)用getInstance時加鎖,請看下面的雙重檢測方案

4、雙重檢測,但要注意寫法

復制代碼 代碼如下:

public class Singleton {
   private static Singleton instance = null;

   private Singleton() { }

   public static Singleton getInstance() {
      if(instance == null) {
         synchronzied(Singleton.class) {
            Singleton temp = instance;
            if(temp == null) {
               temp = new Singleton();
               instance = temp
            }
         }
      }

      return instance;
   }
}

由于指令重排序問題,所以不可以直接寫成下面這樣:
public class Singleton {
   private static Singleton instance = null;

   private Singleton() { }

   public static Singleton getInstance() {
      if(instance == null) {
         synchronzied(Singleton.class) {
            if(instance == null) {
               instance = new Singleton();
            }
         }
      }

      return instance;
   }
}

但是如果instance實例變量用volatile修飾就可以了,volatile修飾的話就可以確保instance = new Singleton();對應的指令不會重排序,如下的單例代碼也是線程安全的:
public class Singleton {
   private static volatile Singleton instance = null;

   private Singleton() { }

   public static Singleton getInstance() {
      if(instance == null) {
         synchronzied(Singleton.class) {
            if(instance == null) {
               instance = new Singleton();
            }
         }
      }

      return instance;
   }
}

相關文章

  • Java文件快速copy復制實例代碼

    Java文件快速copy復制實例代碼

    這篇文章主要給大家介紹了關于Java文件快速copy復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 淺談在Java中使用Callable、Future進行并行編程

    淺談在Java中使用Callable、Future進行并行編程

    這篇文章主要介紹了淺談在Java中使用Callable、Future進行并行編程,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • vue+springboot項目上傳部署tomcat的方法實現(xiàn)

    vue+springboot項目上傳部署tomcat的方法實現(xiàn)

    本文主要介紹了vue+springboot項目上傳部署tomcat的方法實現(xiàn),包括環(huán)境準備、配置調(diào)整以及部署步驟,文中通過圖文及示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • 快速解決Hash碰撞沖突的方法小結

    快速解決Hash碰撞沖突的方法小結

    這篇文章主要介紹了快速解決Hash碰撞沖突的方法小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java中static的用法及注意點

    java中static的用法及注意點

    在本篇文章里小編給大家整理的是一篇關于java中static的用法及注意點,有興趣的朋友們可以學習下。
    2021-03-03
  • Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程

    Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程

    這篇文章主要為大家詳細介紹了Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • SpringCloud_Eureka服務注冊與發(fā)現(xiàn)基礎及構建步驟

    SpringCloud_Eureka服務注冊與發(fā)現(xiàn)基礎及構建步驟

    Eureka服務注冊中心,主要用于提供服務注冊功能,當微服務啟動時,會將自己的服務注冊到Eureka Server,這篇文章主要介紹了SpringCloud中Eureka的配置及詳細使用,需要的朋友可以參考下
    2023-01-01
  • springboot之如何獲取請求ip方法

    springboot之如何獲取請求ip方法

    這篇文章主要介紹了springboot之如何獲取請求ip方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • shrio中hashedCredentialsMatcher密碼匹配示例詳解

    shrio中hashedCredentialsMatcher密碼匹配示例詳解

    shrio是一個輕量級權限管理框架,密碼的匹配由框架內(nèi)部完成。密碼是否匹配由接口CredentialsMatcher定義實現(xiàn)類完成,CredentialsMatcher實現(xiàn)類有SimpleCredentialsMatcher和HashedCredentialsMatcher兩個
    2021-10-10
  • java網(wǎng)上圖書商城(7)訂單模塊2

    java網(wǎng)上圖書商城(7)訂單模塊2

    這篇文章主要為大家詳細介紹了java網(wǎng)上圖書商城,訂單模塊第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論