最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java單例五種實現(xiàn)模式解析

 更新時間:2019年09月07日 09:43:20   作者:技術(shù)-劉騰飛  
這篇文章主要介紹了java單例五種實現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

餓漢式(線程安全,調(diào)用效率高,但是不能延時加載)

一上來就把單例對象創(chuàng)建出來了,要用的時候直接返回即可,這種可以說是單例模式中最簡單的一種實現(xiàn)方式。但是問題也比較明顯。單例在還沒有使用到的時候,初始化就已經(jīng)完成了。也就是說,如果程序從頭到位都沒用使用這個單例的話,單例的對象還是會創(chuàng)建。這就造成了不必要的資源浪費。所以不推薦這種實現(xiàn)方式。

public class ImageLoader{ 
   private static ImageLoader instance = new ImageLoader; 
   private ImageLoader(){} 
   public static ImageLoader getInstance(){ 
     return instance; 
   } 
}

懶漢式(線程安全,調(diào)用效率不高,但是能延時加載)

public class SingletonDemo2 {   
  //類初始化時,不初始化這個對象(延時加載,真正用的時候再創(chuàng)建)
  private static SingletonDemo2 instance;  
  //構(gòu)造器私有化
  private SingletonDemo2(){}   
  //方法同步,調(diào)用效率低
  public static synchronized SingletonDemo2 getInstance(){
    if(instance==null){
      instance=new SingletonDemo2();
    }
    return instance;
  }
}

靜態(tài)內(nèi)部類實現(xiàn)模式(線程安全,調(diào)用效率高,可以延時加載)

可以看到使用這種方式我們沒有顯式的進行任何同步操作,那他是如何保證線程安全呢?和餓漢模式一樣,是靠JVM保證類的靜態(tài)成員只能被加載一次的特點,這樣就從JVM層面保證了只會有一個實例對象。

那么問題來了,這種方式和餓漢模式又有什么區(qū)別呢?不也是立即加載么?實則不然,加載一個類時,其內(nèi)部類不會同時被加載。一個類被加載,當且僅當其某個靜態(tài)成員(靜態(tài)域、構(gòu)造器、靜態(tài)方法等)被調(diào)用時發(fā)生。

但是在遇到序列化對象時,默認的方式運行得到的結(jié)果就是多例的。這種情況不多做說明了,使用時請注意。

 public class SingletonDemo3 {   
   private static class SingletonClassInstance{
     private static final SingletonDemo3 instance=new SingletonDemo3();
   }   
   private SingletonDemo3(){}   
   public static SingletonDemo3 getInstance(){
     return SingletonClassInstance.instance;
   }   
 }

枚舉類(線程安全,調(diào)用效率高,不能延時加載,可以天然的防止反射和反序列化調(diào)用)

 public enum SingletonDemo4 {   
   //枚舉元素本身就是單例
   INSTANCE;   
   //添加自己需要的操作
   public void singletonOperation(){   
   }
 }

Double CheckLock實現(xiàn)單例:DCL也就是雙重鎖判斷機制(由于JVM底層模型原因,偶爾會出問題,不建議使用)

選用

單例對象 占用資源少,不需要延時加載,枚舉 好于 餓漢

單例對象 占用資源多,需要延時加載,靜態(tài)內(nèi)部類 好于 懶漢式

注意線程安全問題

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Spring的RPC通訊模型的使用與比較

    基于Spring的RPC通訊模型的使用與比較

    這篇文章主要介紹了基于Spring的RPC通訊模型的使用與比較,詳細的介紹了RMI、Caucho的Hessian和Burlap以及Spring自帶的HTTP invoker,感興趣的可以了解一下
    2018-09-09
  • Java使用BigDecimal進行運算封裝的實際案例

    Java使用BigDecimal進行運算封裝的實際案例

    今天小編就為大家分享一篇關(guān)于Java使用BigDecimal進行運算封裝的實際案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java畢業(yè)設(shè)計實戰(zhàn)之校園一卡通系統(tǒng)的實現(xiàn)

    Java畢業(yè)設(shè)計實戰(zhàn)之校園一卡通系統(tǒng)的實現(xiàn)

    這是一個使用了java+Springboot+Maven+mybatis+Vue+mysql+wd開發(fā)的校園一卡通系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習(xí),具有校園一卡通系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • Spring Boot 中整合 MyBatis-Plus詳細步驟(最新推薦)

    Spring Boot 中整合 MyBatis-Plus詳細步驟(最新推薦)

    本文詳細介紹了如何在SpringBoot項目中整合MyBatis-Plus,包括整合步驟、基本CRUD操作、分頁查詢、批量操作、自定義SQL操作等,通過這些步驟,開發(fā)者可以快速實現(xiàn)數(shù)據(jù)庫操作,提高開發(fā)效率,感興趣的朋友一起看看吧
    2025-01-01
  • java上界通配符(? extends Type)的使用

    java上界通配符(? extends Type)的使用

    在Java中,? extends Type是一個上界通配符,本文主要介紹了java上界通配符(? extends Type)的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull)

    Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull)

    這篇文章主要介紹了Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢?yōu)镹ull),數(shù)據(jù)庫的字段命名方式為使用下劃線連接,對應(yīng)的實體類應(yīng)該是駝峰命名方式,而我使用的是和數(shù)據(jù)庫同樣的命名方式,需要的朋友可以參考下
    2022-01-01
  • 詳解Spring Boot 集成Shiro和CAS

    詳解Spring Boot 集成Shiro和CAS

    這篇文章主要介紹了詳解Spring Boot 集成Shiro和CAS,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java web學(xué)習(xí)_淺談request對象中g(shù)et和post的差異

    java web學(xué)習(xí)_淺談request對象中g(shù)et和post的差異

    下面小編就為大家?guī)硪黄猨ava web學(xué)習(xí)_淺談request對象中g(shù)et和post的差異。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Spring 應(yīng)用中集成 Apache Shiro的方法

    Spring 應(yīng)用中集成 Apache Shiro的方法

    這篇文章主要介紹了Spring 應(yīng)用中集成 Apache Shiro的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java喚醒本地應(yīng)用的兩種方法詳解

    Java喚醒本地應(yīng)用的兩種方法詳解

    這篇文章主要為大家介紹了Java喚醒本地應(yīng)用的兩種方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

乾安县| 临潭县| 攀枝花市| 房山区| 兰坪| 四子王旗| 淮南市| 莲花县| 方城县| 西盟| 循化| 收藏| 阿拉善左旗| 衡阳县| 临高县| 罗山县| 岑溪市| 神池县| 沧州市| 共和县| 常德市| 乌拉特中旗| 唐山市| 吴川市| 晴隆县| 卓资县| 甘孜县| 昭通市| 静宁县| 乳山市| 张家口市| 体育| 扬州市| 南汇区| 敦煌市| 霍城县| 永平县| 克拉玛依市| 锡林郭勒盟| 商南县| 青阳县|