簡體   English   中英

Java的ThreadPoolExecutor如何使用自定義ThreadFactory?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM