![](/img/trans.png)
[英]Understanding ThreadPoolExecutor with ThreadFactory in Java executors framework
[英]How Java's ThreadPoolExecutor uses custom ThreadFactory?
ThreadPoolExecutor類允許提供自定義ThreadFactory來創建新線程。 但是,我不了解在sun的ThreadPoolExecutor的實現中如何使用這些線程。
此實現創建新線程,如下所示:
private Thread addThread(Runnable firstTask) {
Worker w = new Worker(firstTask);
Thread t = threadFactory.newThread(w);
if (t != null) {
w.thread = t;
...
} ...
但是在Worker的實現中,我看不到字段“ thread”如何用作運行程序。
此外,我不明白如何為Thread提供可重用的自定義“運行”方法(如在ThreadPoolExecutor中被重用的意思是“它們運行多個Runnable”)。 ThreadPoolExecutor如何重用此類線程來運行多個Runnable(假定在構造時設置了Thread類中的“目標” Runnable,並且沒有設置方法)。 ThreadPoolExecutor的文檔如下:
By supplying a different ThreadFactory, you can alter the thread's name, thread group, priority, daemon status, etc.
這是否意味着不使用由自定義ThreadFactory創建的線程的“運行”方法? 這是我理解“自定義線程創建+線程'重用'”機制的唯一方法。
但是在Worker的實現中,我看不到字段“ thread”如何用作運行程序。
正如newThread()文檔所指出的那樣,新創建的線程必須運行作為threadFactory.newThread(Runnuble)的參數提供的Runnuble。 這是新線程用作運行程序的方式。
此外,我不明白如何為Thread提供可重用的自定義“運行”方法
再次,線程的run方法必須運行提供的Runnable.run()一次。 線程輪詢提供了在一個循環中運行任務的Worker。 正確的用戶實現線程的示例:
public class ThreadTL extends Thread {
public ThreadTL(Runnable r) {
super(r);
setName(getName()+" DF "+executor.getClass().getSimpleName());
}
@Override
public void run() {
super.run();
}
}
一個Runnable可以調用另一個。 您傳遞的Runnable是一種從線程池隊列獲取Runnable並運行它們的程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.