ServiceLoader原始碼分析

2021-09-24 13:43:30 字數 941 閱讀 1369

今天得空看了一下serviceloader的原始碼,以前只是會使用這麼個東西,但是不清楚裡邊的來龍去脈的,看完**之後還是有點小收穫的,嘻嘻,所以記錄了下來。

serviceload是jdk1.6才加的這麼乙個類,乙個簡單的服務提供者載入設施

下面就帶著疑問來看**

q1.為什麼serviceloader可以遍歷呢?

q2.為什麼在resources/meta-inf/services下的檔案是全路徑呢?

q3.為什麼一定要放在meta-inf/services這個路徑下呢?

a1:serviceloader實現了iterate的介面

public final class serviceloaderimplements iterable
a2:通過反射的方式獲取到檔名

class<?> c = null;

try catch (classnotfoundexception x)

a3:用**說話,開啟serviceloader的**可以看到有個prefix的常量

private static final string prefix = "meta-inf/services/";
private boolean hasnextservice() 

if (configs == null) catch (ioexception x)

}while ((pending == null) || !pending.hasnext())

pending = parse(service, configs.nextelement());

}nextname = pending.next();

return true;

}

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...