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

Java 如何安全的發(fā)布對(duì)象

 更新時(shí)間:2021年01月04日 10:18:55   作者:入門(mén)小站  
這篇文章主要介紹了Java 如何安全的發(fā)布對(duì)象,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

安全發(fā)布對(duì)象

  • 在靜態(tài)初始化函數(shù)中初始化一個(gè)對(duì)象引用
  • 將對(duì)象的引用保存到volatile類(lèi)型域或者AtomicReference對(duì)象中
  • 將對(duì)象的引用保存到某個(gè)正確構(gòu)造對(duì)象的final類(lèi)型域中
  • 將對(duì)象的引用保存到一個(gè)由鎖保護(hù)的域中

Spring 框架中,Spring管理的類(lèi)都是單例模式。如何保證一個(gè)實(shí)例只被初始化一次,且線程安全?通過(guò)不同單例的寫(xiě)法,具體描述安全發(fā)布對(duì)象的四種方法:

在靜態(tài)初始化函數(shù)中初始化一個(gè)對(duì)象的引用(不推薦)

package com.rumenz.task.single;


//線程安全
//餓漢模式
//靜態(tài)代碼塊初始化
public class SingletonExample {
  private SingletonExample(){
    //初始化操作
  }
  private static SingletonExample singletonExample=null;

  static {
    singletonExample=new SingletonExample();
  }

  public static SingletonExample getInstance(){
    return singletonExample;
  }
}

//或者
package com.rumenz.task.single;
//線程安全
//餓漢模式
//靜態(tài)代碼塊初始化
public class SingletonExample {
  private SingletonExample(){

    //初始化操作

  }
  private static SingletonExample singletonExample=new SingletonExample();



  public static SingletonExample getInstance(){
    return singletonExample;
  }
}

缺點(diǎn):用不用都會(huì)初始化對(duì)象,如果初始化工作較多,加載速度會(huì)變慢,影響系統(tǒng)性能。

將對(duì)象的引用保存到volatile類(lèi)型或AtomicReference對(duì)象中(推薦)

package com.rumenz.task.single;

//線程安全
//懶漢模式
public class SingletonExample1 {

  private SingletonExample1() {
    //初始化操作
  }
  // 1、memory = allocate() 分配對(duì)象的內(nèi)存空間
  // 2、ctorInstance() 初始化對(duì)象
  // 3、instance = memory 設(shè)置instance指向剛分配的內(nèi)存
  // 單例對(duì)象 volatile + 雙重檢測(cè)機(jī)制 -> 禁止指令重排
  private volatile static SingletonExample1 singletonExample1=null;
  //靜態(tài)工廠方法
  public static SingletonExample1 getInstance(){
    if(singletonExample1==null){ //雙重檢測(cè)
      synchronized(SingletonExample1.class){ //同步鎖
        if(singletonExample1==null){
          singletonExample1=new SingletonExample1();
        }
      }
    }
    return singletonExample1;
  }
}

優(yōu)點(diǎn):按需加載
缺點(diǎn):第一次初始化的時(shí)候可能會(huì)比較慢

通過(guò)synchronized(不推薦)

package com.rumenz.task.single;

public class SingletonExample3 {
  //私有構(gòu)造函數(shù)
  private SingletonExample3(){
    //初始化操作
  }

  private static SingletonExample3 singletonExample3=null;
  //靜態(tài)的工廠方法
  public static synchronized SingletonExample3 getSingletonExample3(){
     if(singletonExample3==null){
       singletonExample3=new SingletonExample3();
     }
     return singletonExample3;
  }
}

缺點(diǎn):每次進(jìn)入getSingletonExample3都會(huì)加鎖,耗費(fèi)資源,故不推薦使用。

枚舉(推薦)

package com.rumenz.task.single;

public class SingletonExample4 {

  //私有構(gòu)造函數(shù)
  private SingletonExample4(){
    //初始化
  }
  public static SingletonExample4 getSingletonExample4(){
    return Singleton.INSTANCE.getSingleton();
  }
  private enum Singleton{
    INSTANCE;
    private SingletonExample4 singleton;
    Singleton(){
      singleton=new SingletonExample4();
    }
    public SingletonExample4 getSingleton(){
      return singleton;
    }

  }
}

優(yōu)點(diǎn):天然線程安全,可防止反射生成實(shí)例,推薦使用

以上就是Java 如何安全的發(fā)布對(duì)象的詳細(xì)內(nèi)容,更多關(guān)于Java 安全的發(fā)布對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

  • JAVA使用quartz添加定時(shí)任務(wù),并依賴(lài)注入對(duì)象操作

    JAVA使用quartz添加定時(shí)任務(wù),并依賴(lài)注入對(duì)象操作

    這篇文章主要介紹了JAVA使用quartz添加定時(shí)任務(wù),并依賴(lài)注入對(duì)象操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Mybatis?List列表In查詢(xún)實(shí)現(xiàn)的注意事項(xiàng)說(shuō)明

    Mybatis?List列表In查詢(xún)實(shí)現(xiàn)的注意事項(xiàng)說(shuō)明

    這篇文章主要介紹了Mybatis?List列表In查詢(xún)實(shí)現(xiàn)的注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot使用Redis的zset統(tǒng)計(jì)在線用戶(hù)信息

    SpringBoot使用Redis的zset統(tǒng)計(jì)在線用戶(hù)信息

    這篇文章主要介紹了SpringBoot使用Redis的zset統(tǒng)計(jì)在線用戶(hù)信息,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-04-04
  • java file.renameTo返回false的原因及解決方案

    java file.renameTo返回false的原因及解決方案

    這篇文章主要介紹了java file.renameTo返回false的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java?String之contains方法的使用詳解

    Java?String之contains方法的使用詳解

    這篇文章主要介紹了Java?String之contains方法的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring實(shí)現(xiàn)在非controller中獲取request對(duì)象

    Spring實(shí)現(xiàn)在非controller中獲取request對(duì)象

    這篇文章主要介紹了Spring實(shí)現(xiàn)在非controller中獲取request對(duì)象方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 如何把本地jar包導(dǎo)入maven并pom添加依賴(lài)

    如何把本地jar包導(dǎo)入maven并pom添加依賴(lài)

    這篇文章主要介紹了如何把本地jar包導(dǎo)入maven并pom添加依賴(lài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java文件下載代碼實(shí)例(單文件下載和多文件打包下載)

    java文件下載代碼實(shí)例(單文件下載和多文件打包下載)

    這篇文章主要介紹了java文件下載代碼實(shí)例(單文件下載和多文件打包下載),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 最新評(píng)論

    武乡县| 乐亭县| 噶尔县| 阿坝县| 澳门| 安达市| 阳西县| 怀宁县| 江山市| 英吉沙县| 合川市| 河间市| 湘潭市| 鲜城| 常德市| 乌拉特后旗| 巴塘县| 涞水县| 新邵县| 霍城县| 岱山县| 古丈县| 亚东县| 开化县| 巩义市| 县级市| 泾阳县| 隆化县| 普兰店市| 利津县| 普兰县| 巴中市| 东兰县| 武鸣县| 神农架林区| 平泉县| 府谷县| 罗平县| 泸定县| 永春县| 漳州市|