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

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

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

安全發(fā)布對象

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

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

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

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):用不用都會初始化對象,如果初始化工作較多,加載速度會變慢,影響系統(tǒng)性能。

將對象的引用保存到volatile類型或AtomicReference對象中(推薦)

package com.rumenz.task.single;

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

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

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

通過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都會加鎖,耗費(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):天然線程安全,可防止反射生成實例,推薦使用

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

  • JAVA使用quartz添加定時任務(wù),并依賴注入對象操作

    JAVA使用quartz添加定時任務(wù),并依賴注入對象操作

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

    Mybatis?List列表In查詢實現(xiàn)的注意事項說明

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

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

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

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

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

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

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

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

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

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

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

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

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

    增城市| 南宫市| 乐安县| 林芝县| 万山特区| 遵义县| 湖南省| 衡水市| 修文县| 枣庄市| 沙雅县| 白河县| 修水县| 镇康县| 建德市| 罗山县| 南安市| 曲松县| 清水河县| 巴南区| 尼木县| 根河市| 沾化县| 西丰县| 徐闻县| 灵丘县| 章丘市| 清新县| 肇东市| 怀宁县| 万安县| 建德市| 亳州市| 华安县| 当涂县| 盐津县| 丰都县| 神农架林区| 嘉兴市| 闻喜县| 汉中市|