成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java單例模式學習筆記

開發 后端
Singleton 模式的宗旨在于確保某個類只有一個實例,別且為之提供一個全局訪問點。為了防止其他工作人員實例化我們的類。

Singleton 模式的宗旨在于確保某個類只有一個實例,別且為之提供一個全局訪問點。為了防止其他工作人員實例化我們的類,

可以為該類創建唯一一個構造器,并將構造器的可見設置為私有。值得注意的是,如果我們創建了其他的非私有的構造器,或者根本沒有為該類提

供構造器,那么其他人員還是能實例化我們的類。 如果不希望提前創建單例對象,我們可以等到第一次使用該單例對象的時候在創建它,即

滯后初始化。滯后初始化單例對象有兩個理由:

1.也許在靜態初始化時間,你沒有關于如何初始化單例對象的足夠信息。

2.選擇滯后初始化單例的目的也許為了等待資源,諸如數據庫連接,尤其是在某些特定會話中不需要這個單例的應用程序中。

如果在多線程環境中對單例采用滯后初始化,那么我們必須小心防止多個線程同時初始化該

通常單例模式在Java語言中,有兩種構建方式:

懶漢方式:指全局的單例實例在第一次被使用時構建。延遲初始化。

餓漢方式:指全局的單例實例在類裝載時構建。 急切初始化。

1,餓漢式單例類

 

  1. public class Singleton1 {  
  2.       
  3.     private Singleton1() {  
  4.     }  
  5.     // 在自己內部定義自己一個實例.  
  6.     // 注意這是private 只供內部調用  
  7.  
  8.     private static Singleton1 instance = new Singleton1();  
  9.  
  10.     /** *//**  
  11.      *  這里提供了一個供外部訪問本class的靜態方法,可以直接訪問    
  12.      * @return  
  13.      */ 
  14.     public static Singleton1 getInstance() {  
  15.         return instance;  
  16.     }  

 

 

2,懶漢式單例類

 

  1. public class Singleton2 {  
  2.  
  3.     private static Singleton2 instance = null;  
  4.     /** *//**  
  5.      * 這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     
  6.      * 使用時生成實例,提高了效率!  
  7.      * @return  
  8.      */ 
  9.     public static  Singleton2 getInstance() {      
  10.         if (instance == null)  
  11.             instance = new Singleton2();  
  12.         return instance;  
  13.     }  

 

 

下面主要多線程問題,在懶漢單例中,單線程是沒有問題的,但多線程時就會有可能出現兩個或者以上的Singletion2實例的情況。

例如:線程1在判斷instance==null為真,掃行new操作時,在執行new操作之前,判斷為真之后,線程2正好執行判斷操作,這時instance還為null.因此,線程2也會執行new操作。以此類推,在高并發下面,就可能存在兩個或者以上的Singletion2的實例。顯然,這是不正確的。

因此改變代碼如下:

 

  1. public class Singleton3 {  
  2.  
  3.     private static Singleton3 instance = null;  
  4.     /** *//**  
  5.      * 這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     
  6.      * 使用時生成實例,提高了效率!  
  7.      * 為了多線程不出錯,加入了同步標志  
  8.      * @return  
  9.      */ 
  10.     public static synchronized  Singleton3 getInstance() {      
  11.         if (instance == null)  
  12.             instance = new Singleton3();  
  13.         return instance;  
  14.     }  
  15.  

 

 

但這樣又產生了一個問題,每次獲取實例時方法都是同步的,顯然性能很受影響的,所以繼續更改代碼如下:

先記一下:volatile(網上抄的)

volatile, 用更低的代價替代同步

為什么使用volatile比同步代價更低?

同步的代價, 主要由其覆蓋范圍決定, 如果可以降低同步的覆蓋范圍, 則可以大幅提升程序性能.

而volatile的覆蓋范圍僅僅變量級別的. 因此它的同步代價很低.

volatile原理是什么?

volatile的語義, 其實是告訴處理器, 不要將我放入工作內存, 請直接在主存操作我.(工作內存詳見java內存模型)

因此, 當多核或多線程在訪問該變量時, 都將直接操作主存, 這從本質上, 做到了變量共享.

volatile的有什么優勢?

1, 更大的程序吞吐量

2, 更少的代碼實現多線程

3, 程序的伸縮性較好

4, 比較好理解, 無需太高的學習成本

volatile有什么劣勢?

1, 容易出問題

2, 比較難設計

volatile使用jdk要求1.5版本及1.5以上。

改進后的代碼如下(又叫雙重加鎖):

 

  1. public class Singleton4 {  
  2.    private static volatile Singleton4 instance;  
  3.     /** *//**  
  4.      * 雙重加鎖實現多線程運用和性能優化  
  5.      * @return  
  6.      */ 
  7.     public static Singleton4 getInstance()  
  8.     {  
  9.       if (instance == null)  
  10.       {  
  11.         synchronized(Singleton4.class) {  //1  
  12.           if (instance == null)          //2  
  13.             instance = new Singleton4();  //3  
  14.         }  
  15.       }  
  16.       return instance;  
  17.     }  
  18. }  
[[20017]]

 

參考自第聯網和head first設計模式。

【編輯推薦】

  1. Google首席架構師談Java的命運
  2. JVM安裝與Tomcat配置具體步驟
  3. 巧解Tomcat中JVM內存溢出問題
  4. Oracle發布Java移動開發框架ADF
  5. 揭露JDK,JRE,JVM三者不為人知的隱情
責任編輯:金賀 來源: blogjava
相關推薦

2020-09-16 12:18:28

GoJava模式

2021-02-01 10:01:58

設計模式 Java單例模式

2021-03-02 08:50:31

設計單例模式

2022-09-29 08:39:37

架構

2016-03-28 10:23:11

Android設計單例

2013-11-26 16:20:26

Android設計模式

2021-09-07 10:44:35

異步單例模式

2021-02-07 23:58:10

單例模式對象

2022-02-06 22:30:36

前端設計模式

2022-06-07 08:55:04

Golang單例模式語言

2015-09-06 11:07:52

C++設計模式單例模式

2023-11-21 21:39:38

單例模式音頻管理器

2011-06-28 15:18:45

Qt 單例模式

2024-02-04 12:04:17

2024-03-06 13:19:19

工廠模式Python函數

2016-10-09 09:37:49

javascript單例模式

2015-01-14 13:26:58

AndroidJava單例

2019-06-11 09:50:07

SparkBroadcast代碼

2021-07-27 07:31:16

單例模式關鍵字

2010-02-05 17:00:06

C++單例模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国家aaa的一级看片 h片在线看 | 亚洲www啪成人一区二区 | 久草视频在线播放 | 精品免费国产一区二区三区 | 欧美老少妇一级特黄一片 | 一区二区精品 | 成人亚洲一区 | 国产精品精品久久久久久 | 日韩欧美国产精品 | 亚洲一级毛片 | 国产精品一区二区三区四区 | 午夜国产羞羞视频免费网站 | 欧美性猛交一区二区三区精品 | 新超碰97| 一级做a爰片久久毛片 | 久草新在线 | 日韩视频精品在线 | 国产在线视频一区二区董小宛性色 | 一区二区视屏 | 午夜影院在线观看视频 | 亚洲精品一 | 精品久久久久久久久久久久 | 国产精品国产亚洲精品看不卡15 | 国产精品网址 | 国产一级一片免费播放 | 国产精品久久久久久久久久久新郎 | 欧美色综合 | 国产成人福利在线观看 | 97av视频在线观看 | 久久久久久免费观看 | 蜜桃视频一区二区三区 | 国产在线观看一区二区三区 | 国产高清免费 | 亚洲欧美日本国产 | 国产日产欧产精品精品推荐蛮挑 | 国产成人综合一区二区三区 | 精品国产乱码久久久久久果冻传媒 | 中文字幕一区二区三区日韩精品 | 久草免费视 | 午夜精品久久久久久久久久久久 | 久久久久午夜 |