第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有多個不同類加載器的Singleton類

具有多個不同類加載器的Singleton類

慕標琳琳 2019-12-15 16:12:18
例如我有Singleton靜態(tài)字段的類instance:public class Singleton {    private static Singleton instance;    // other code, construct, getters, no matter    }我可以使用兩個不同的類加載器兩次加載該類。我該如何避免呢?這是不安全和危險的。另外,如果我將instance設(shè)置為null,那么是否將兩個類的instance都設(shè)置為null?Singleton singleton = Singleton.getInstance();singleton = null;
查看完整描述

2 回答

?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

如果您希望Singleton跨類加載器為true ,則需要一個公共父級來加載所討論的類,或者您需要自己指定類加載器。


private static Class getClass(String classname) throws ClassNotFoundException {

? ? ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

? ? if(classLoader == null)?

? ? ? ? classLoader = Singleton.class.getClassLoader();

? ? ? return (classLoader.loadClass(classname));

}



查看完整回答
反對 回復(fù) 2019-12-16
?
絕地?zé)o雙

TA貢獻1946條經(jīng)驗 獲得超4個贊

這是一個濫用Properties擴展事實的技巧,這是一個Map舊的不幸的設(shè)計決定。


public final class JvmWideSingleton

{

    private static final JvmWideSingleton INSTANCE;


    static {

        // There should be just one system class loader object in the whole JVM.

        synchronized(ClassLoader.getSystemClassLoader()) {

            Properties sysProps = System.getProperties();

            // The key is a String, because the .class object would be different across classloaders.

            JvmWideSingleton singleton = (JvmWideSingleton) sysProps.get(JvmWideSingleton.class.getName());


            // Some other class loader loaded JvmWideSingleton earlier.

            if (singleton != null) {

                INSTANCE = singleton;

            }

            else {

                // Otherwise this classloader is the first one, let's create a singleton.

                // Make sure not to do any locking within this.

                INSTANCE = new JvmWideSingleton();

                System.getProperties().put(JvmWideSingleton.class.getName(), INSTANCE);

            }

        }

    }


    public static JvmWideSingleton getSingleton() {

        return INSTANCE;

    }

}

可以對其進行參數(shù)化,但隨后的初始化將變得很懶,并轉(zhuǎn)到getSingleton()。


Properties是Hashtable基于-的,因此它是線程安全的(根據(jù)文檔)。所以可以使用props.computeIfAbsent()。但是我更喜歡這種方式。


另請閱讀:Java系統(tǒng)屬性的范圍


我只是寫了它,有可能我忽略了某些東西,這會阻止它工作。



查看完整回答
反對 回復(fù) 2019-12-16
?
呼啦一陣風(fēng)

TA貢獻1802條經(jīng)驗 獲得超6個贊

您確定Sneha是該帖子的作者(或至少部分關(guān)于類加載器)嗎?從我所看到的鏈接文章已經(jīng)發(fā)布,8 JANUARY 2009但是它看起來與javaworld出版的相當(dāng)老文章的一部分相同Apr 25, 2003。博客上的文章甚至包含句子“ 可以使用前面的方法代替Class.forName() ”,這似乎沒有上下文,因為Class.forName()在更早的地方?jīng)]有使用任何方法,而在Javaworld中是有意義的,因為示例10使用了反射。

查看完整回答
反對 回復(fù) 2019-12-16
  • 2 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號