真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java怎么實現(xiàn)單例模式

這篇文章主要講解了“java怎么實現(xiàn)單例模式”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“java怎么實現(xiàn)單例模式”吧!

目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計、萬載網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

要點

  1. 某個類只能有一個實例

    • 構(gòu)造器私有化

  2. 它必須自行創(chuàng)建這個實例

    • 含有一個該類的靜態(tài)變量來保存這個唯一實例

  3. 必須自行先整個系統(tǒng)提供這個實例

    • 對外提供獲取該實例對象的方式

    1. 直接暴露

    2. 用靜態(tài)變量的 get 方法獲取

常見幾種形式

  • 餓漢式:直接創(chuàng)建對象不存在線程安全問題

    • 直接實例化餓漢式(簡潔直觀)

    • 枚舉式(最簡潔)

    • 靜態(tài)代碼塊餓漢式(適合復(fù)雜實例化)

  • 懶漢式:延遲創(chuàng)建對象

    • 線程不安全(適用于單線程)

    • 線程安全(適用于多線程)

    • 靜態(tài)內(nèi)部列形式(適用于多線程)

  1. 直接實例化對象,不管是否需要這個對象-餓漢式

/*
* 餓漢式
*(1)構(gòu)造器私有化
*(2)自行創(chuàng)建,并用靜態(tài)變量保存
*(3)向外提供這個實例
*(4)強調(diào)這是單例,用final修飾(這個變量只能賦值一次,之后不能修改)
*/
public class Singleton1 {
    public static final Singleton1 INSTANCE = new Singleton1();
    private Singleton1 (){
        
    }
}
  1. 枚舉-jdk1.5之后-餓漢式

/*
*餓漢式
*枚舉類型:表示該類型的對象是有限的幾個
*我們可以限定為一個,就成了單例
*/
public enum Singleton2{
    INSTANCE
}
  1. 靜態(tài)代碼塊-餓漢式

/*
* 這種方式,適合那種需要從配置文件里面讀一堆信息來實例化。
*/
public class Singleton3 {
    public static final Singleton3 INSTANCE;
    private String info;
    static {
        try {
            Properties pro = new Properties(); // 從位于src目錄下的配置文件single.properties中讀取信息
            pro.load(Sinfleton3.class.getClassLoader().getResourceAsStream("single.properties"));
            INSTANCE = new Singleton3(pro.getPropertied("info"));
        }catch(IOExcepption e){
            throw new RuntimeException(e);
        }
    }
    private Singleton3 (String info){
        this.info = info;
    }
}

4.線程不安全(適合單線程)-懶漢式

/*
* 懶漢式
*(1)構(gòu)造器私有化
*(2)靜態(tài)變量保存
*(3)提供一個靜態(tài)方法,獲取實例對象
*/
public class Singleton4 {
    private static Singleton4 instance;
    private Singleton4 (){
        
    }
    public static Singleton4 getInstance(){
        if(instance == null){
            //加上Thread.sleep(100);多線程情況下 會實例化兩個對象。
            instance = new Singleton4();
        }
        return instance;
    }
}
  1. 線程安全(適合多線程)-懶漢式

/*
* 懶漢式
*(1)構(gòu)造器私有化
*(2)靜態(tài)變量保存
*(3)提供一個靜態(tài)方法,獲取實例對象
*/
public class Singleton5 {
    private static Singleton5 instance;
    private Singleton5 (){
        
    }
    public static Singleton5 getInstance(){
        if(instance == null){//先判斷是否為空,再進行加鎖。
            synchronized(Singleton5.class){
                //加上Thread.sleep(100);多線程情況下 會實例化兩個對象。
                instance = new Singleton5();
            }
        }
        return instance;
    }
}
  1. 靜態(tài)內(nèi)部類形式

/*
* 再內(nèi)部類被加載和初始化時,才創(chuàng)建INSTANCE實例對象
* 靜態(tài)內(nèi)部類不會自動隨著外部類的加載和初始化而初始化,它是要單獨去加載和初始化的
* 因為是在內(nèi)部類加載和初始化是,創(chuàng)建的,因此是線程安全的。
*/
public class Singleton6 {
    
    private Singleton6 (){
        
    }
    private static class Inner{
        private static final Singleton6 INSTANCE = new Singleton6();
    }
    public static Singleton6 getInstance(){
        return Inner.INSTANCE;
    }
}

感謝各位的閱讀,以上就是“java怎么實現(xiàn)單例模式”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對java怎么實現(xiàn)單例模式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


當前題目:java怎么實現(xiàn)單例模式
文章網(wǎng)址:http://weahome.cn/article/ipjjsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部