亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

莱州市| 德化县| 庆云县| 景泰县| 维西| 九江市| 屯留县| 荔浦县| 文成县| 双柏县| 青浦区| 涟水县| 廉江市| 清镇市| 伊宁市| 亚东县| 澄城县| 轮台县| 瑞丽市| 成都市| 台山市| 长海县| 乌兰浩特市| 玉环县| 饶河县| 甘孜| 镇平县| 满城县| 唐山市| 峨眉山市| 南郑县| 襄樊市| 中西区| 泸西县| 临清市| 海原县| 新蔡县| 墨脱县| 库尔勒市| 砀山县| 金乡县|