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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

線程上下文類裝入器與普通類加載器的區(qū)別

線程上下文類裝入器與普通類加載器的區(qū)別

一只甜甜圈 2019-07-19 10:48:16
線程上下文類裝入器與普通類加載器的區(qū)別線程的上下文類裝入器和普通的類加載器之間有什么區(qū)別?也就是說,如果Thread.currentThread().getContextClassLoader()和getClass().getClassLoader()返回不同的類加載器對(duì)象,將使用哪一個(gè)?
查看完整描述

3 回答

?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

每個(gè)類將使用自己的類加載器加載其他類。所以如果ClassA.class參考文獻(xiàn)ClassB.class然后ClassB的類加載器的類路徑上。ClassA或者它的父母。

線程上下文類加載器是當(dāng)前線程的當(dāng)前類加載器。中的類創(chuàng)建對(duì)象。ClassLoaderC然后傳遞給ClassLoaderD..在這種情況下,對(duì)象需要使用Thread.currentThread().getContextClassLoader()如果它希望加載它自己的類加載器上不可用的資源,則直接加載。


查看完整回答
反對(duì) 回復(fù) 2019-07-19
?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊

這并不能回答原來的問題,但因?yàn)檫@個(gè)問題的排名很高,而且對(duì)任何一個(gè)問題都有關(guān)聯(lián)。ContextClassLoader查詢,我認(rèn)為重要的是回答相關(guān)的問題,什么時(shí)候應(yīng)該使用上下文類加載器。簡(jiǎn)短答覆:不要使用上下文類加載器。!但是把它設(shè)置為getClass().getClassLoader()當(dāng)您必須調(diào)用缺少ClassLoader參數(shù)。

當(dāng)一個(gè)類的代碼請(qǐng)求加載另一個(gè)類時(shí),要使用的正確的類加載器與調(diào)用方類相同。(即getClass().getClassLoader())。99.9%的情況是這樣的,因?yàn)?/trans>這就是jvm自己所做的。第一次構(gòu)造新類的實(shí)例、調(diào)用靜態(tài)方法或訪問靜態(tài)字段時(shí)。

當(dāng)您希望使用反射(例如反序列化或加載可配置的命名類)創(chuàng)建類時(shí),執(zhí)行反射的庫(kù)應(yīng)該總是詢問應(yīng)用程序通過接收ClassLoader作為應(yīng)用程序的參數(shù)。應(yīng)用程序(它知道所有需要構(gòu)造的類)應(yīng)該傳遞它。getClass().getClassLoader().

獲得類加載器的任何其他方法都是不正確的。如果庫(kù)使用諸如Thread.getContextClassLoader()sun.misc.VM.latestUserDefinedLoader(),或sun.reflect.Reflection.getCallerClass()這是一個(gè)由API缺陷引起的錯(cuò)誤?;旧?,Thread.getContextClassLoader()存在的唯一原因是,無論是誰設(shè)計(jì)了ObjectInputStreamAPI忘記接受ClassLoader作為一個(gè)參數(shù),這個(gè)錯(cuò)誤至今一直困擾著Java社區(qū)。

也就是說,許多JDK類使用少數(shù)幾個(gè)黑客中的一個(gè)來猜測(cè)要使用的類加載器。有些人使用ContextClassLoader(當(dāng)您在共享線程池上運(yùn)行不同的應(yīng)用程序時(shí),或者當(dāng)您離開ContextClassLoader null),有些人在堆棧中行走(當(dāng)類的直接調(diào)用者本身是一個(gè)庫(kù)時(shí),堆棧就會(huì)失敗),有些人使用系統(tǒng)類裝入器(這很好,只要文檔中只使用CLASSPATH)或者引導(dǎo)類加載器,并且有些使用上述技術(shù)的不可預(yù)測(cè)的組合(這只會(huì)使事情變得更加混亂)。這導(dǎo)致了大量的哭泣和咬牙切齒。

當(dāng)使用這樣的API時(shí),首先,嘗試查找接受類加載器作為參數(shù)的方法的重載。..如果沒有合理的方法,請(qǐng)嘗試將ContextClassLoader在API調(diào)用之前(然后重新設(shè)置它):

ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();try {
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
    // call some API that uses reflection without taking ClassLoader param} finally {
    Thread.currentThread().setContextClassLoader(originalClassLoader);}


查看完整回答
反對(duì) 回復(fù) 2019-07-19
  • 3 回答
  • 0 關(guān)注
  • 1203 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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