ThreadPoolExecutor原始碼學習

2021-10-10 18:24:02 字數 1905 閱讀 9555

我們之前溫習了thread類,明白了runable介面才是多執行緒的任務核心。那麼threadpoolexecutor就是用維護多執行緒的。作為工具類,threadpoolexecutor應該提供了很多操作執行緒的方法,按理說也是逐個去呼叫目標執行緒的方法。那麼我們就詳細了解一下threadpoolexecutor的實現過程吧。我們發現threadpoolexecutor類繼承了abstractexecutorservice。而abstractexecutorservice實現了executorservice,executorservice繼承了executor,executor主要提供execute方法。應該和真正的執行緒start方法掛鉤。在abstractexecutorservice方法中實現了executorservice的介面。executorservice主要包含了執行緒的提交和執行緒的中斷等方法。

作為執行緒管理的工具,那麼threadpoolexecutor就是專門維護執行緒執行的,那麼執行緒的容器也必然在這個類中,也就是我們新建的執行緒會提交到這個類中,然後通過這個類會將提交的runnable任務按照他的安排進行執行。我們看到在threadpoolexecutor中有乙個    private final hashsetworkers = new hashset();其中的worker就是用來儲存runnable任務的工作任務。

worker(runnable firsttask)
按照上邊的邏輯,那麼worker就是我們提交的任務的**,也就是呼叫了start方法。然後呼叫runwroker的方法。而start方法是在addworker中呼叫的

private boolean addworker(runnable firsttask, boolean core) 

}boolean workerstarted = false;

boolean workeradded = false;

worker w = null;

try

} finally

if (workeradded)

}} finally

return workerstarted;

}

呼叫真正的執行緒

inal void runworker(worker w)  catch (runtimeexception x)  catch (error x)  catch (throwable x)  finally 

} finally

}completedabruptly = false;

} finally

}獲取任務佇列

private runnable gettask()

工作執行緒數量

int wc = workercountof(c);

// are workers subject to culling?

boolean timed = allowcorethreadtimeout || wc > corepoolsize;

if ((wc > maximumpoolsize || (timed && timedout)) && (wc > 1 || workqueue.isempty()))

try catch (interruptedexception retry) }}

後置處理

private void processworkerexit(worker w, boolean completedabruptly) finally

將當前執行緒停止

tryterminate();

int c = ctl.get();

if (runstatelessthan(c, stop))

建立新的工作執行緒

addworker(null, false);

}}

Redux createStore原始碼學習

redux apiexport原始碼結構上面我們看到了redux的api和原始碼結構,看的出來,warning.js和index.js不用解析,都看得懂,關鍵時其餘的幾個module,那我們從最重要的createstore講起。export var actiontypes 首先定義了乙個action...

pytorch geometric 原始碼學習

作者大神真的太屌了,膜拜,工程實現能力太強了 本文希望能夠記錄學習其原始碼的過程 data dataset 部分 涉及優化?property 一種python內建裝飾器,可以將乙個成員函式當成成員變數來訪問,例如 class planetoid inmemorydataset url def ini...

logback原始碼閱讀 根據原始碼學擴充套件點 七

原始碼 點選跳轉 1.xml定義 xml version 1.0 encoding utf 8 configuration property name charset value utf 8 name class encoder pattern p d t logger line n m n n p...