線程上下文類加載器說明

線程上下文類加載器(Context Classloader)

線程上下文類加載器是從JDK1.2開始引入的,類Thread中的getContextClassloader()和setContextClassloader()方法分別是獲取當前線程上下文類加載器和設置線程上下文類加載器。

 

如果沒有通過setContextClassloader()設置線程上下文類加載器,那麼線程將繼承其父線程的上下文加載器,Java運行時其初始線程的上下文類加載器爲AppClassloader,在線程中運行的代碼可以通過此加載器去加載類和資源。

 

線程上下文類加載器的重要作用:

SPI(Service Provide Interface)

父classloader可以使用當前線程類加載器Thread.currentThread().getContextClassloader()所加載的類,這就改變了父加載器不能加載子加載器所加載的類以及沒有父子關係的Classloader所加載的類,即改變了雙親委託模型。

線程上下文加載器就是當前線程的Current Classloader

在雙親委託模型下,類加載是由下至上的,即下層類加載器會委託上層類加載器去加載所需要的類,但是對於SPI來說,有些接口是JAVA核心庫所提供的的,而Java核心庫是由啓動類加載器來加載的,而這些接口的實現卻來自不同的jar包(廠商提供),Java啓動類加載器不會加載其他來源的jar包,這樣傳統的雙親委託模型就不能滿足SPI的需求,而通過設置線程上下文類加載器就可以由線程上下文類加載器去加載相應的類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章