中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java反射與單例設計模式實例介紹

發布時間:2021-08-31 14:27:01 來源:億速云 閱讀:144 作者:chen 欄目:編程語言

本篇內容介紹了“java反射與單例設計模式實例介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

反射與單例設計模式

單例設計模式的核心本質在于:類內部的構造方法私有化,在類的內部產生實例化對象后通過static方法獲取實例化對象,進行類中的結構調用,單例設計模式一共有兩類:懶漢式、餓漢式,本節主要來討論懶漢式的單例設計模式。

范例:觀察懶漢式單例設計模式的問題
單線程狀態執行:

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
        Singleton sinA = Singleton.getInstance();
        sinA.print();
    }
}
class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public static Singleton getInstance() {if (instance == null) {            instance = new Singleton();
        }
        return instance;    }
    public void print() {
        System.out.println("www.mldn.cn");
    }
}

多線程狀態執行:

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {for (int x = 0; x < 3; x++) {new Thread(()->{
                Singleton.getInstance().print();
            },"單例消費端-"+ x).start();
        }/**         * 【單例消費端-0】****** 實例化Singleton類對象 *******         * 【單例消費端-1】****** 實例化Singleton類對象 *******         * www.mldn.cn         * 【單例消費端-2】****** 實例化Singleton類對象 *******         * www.mldn.cn         * www.mldn.cn         */}
}class Singleton {
    private static Singleton instance = null;
    private Singleton() {
        System.out.println("【" + Thread.currentThread().getName() +"】****** 實例化Singleton類對象 *******",Thread.currentThread().getName());
    }
    public static Singleton getInstance() {if (instance == null) {
            instance = new Singleton();
        }return instance;
    }
    public void print() {
        System.out.println("www.mldn.cn");
    }
}

單例設計模式的最大特點是在整體的運行程序中只允許產生一個實例化對象,但當有了若干個線程之后,實際上當前的程序就會產生多個實例化對象了,此時就不是單例設計模式了。此時問題造成的關鍵在于代碼本身出現了不同步的情況,而要想解決的關鍵就在于同步處理,也就是需要使用synchronized關鍵字。

java反射與單例設計模式實例介紹
單例設計模式問題

范例:修改getInstance()進行同步處理

class Singleton {
    private static Singleton instance = null;
    private Singleton() {
        System.out.println("【" + Thread.currentThread().getName() +"】****** 實例化Singleton類對象 *******",Thread.currentThread().getName());
    }
    public static synchronized Singleton getInstance() {if (instance == null) {            instance = new Singleton();
        }
        return instance;    }
    public void print() {
        System.out.println("www.mldn.cn");
    }
}

這個時候的確是進行了同步處理,但這個同步處理的代價有些大,因為效率會低。因為整體代碼中實際上只有一塊部分需要進行同步處理,也就是instance對象的實例化處理部分。我們可以知道,之前的同步操作是有些失誤的。

范例:更加合理地進行同步處理

class Singleton {
    private static volatile Singleton instance = null;
    private Singleton() {
        System.out.printf("【" + Thread.currentThread().getName() +"】****** 實例化Singleton類對象 *******",Thread.currentThread().getName());
    }
    public static Singleton getInstance() {if (instance == null) {
            synchronized (Singleton.class) {if (instance == null) {                    instance = new Singleton();
                }
            }
        }
        return instance;    }
    public void print() {
        System.out.println("www.mldn.cn");
    }
}

“java反射與單例設計模式實例介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

银川市| 广宁县| 景泰县| 德州市| 桦川县| 万山特区| 洛南县| 珲春市| 昆山市| 平远县| 凌海市| 重庆市| 沁源县| 济宁市| 盐津县| 福海县| 泽州县| 睢宁县| 丹阳市| 南木林县| 页游| 日喀则市| 朔州市| 库尔勒市| 阿合奇县| 徐水县| 琼结县| 普定县| 边坝县| 永善县| 芜湖县| 平罗县| 新兴县| 喀喇沁旗| 洛隆县| 周宁县| 故城县| 广安市| 连城县| 鲁甸县| 油尖旺区|