如何限制在Executor
中執行的線程數?例如,在代碼波紋管:速率限制執行程序(Java)中的線程數
executor = Executors.newFixedThreadPool(this.noOfThreads);
for (int i = 0; i < sections.size(); i++) {
DomNode section = sections.get(i);
// Retrieve the url of the subsection
String subsectionUrl = section.getNodeValue();
if(i != 0 && (i % noOfThreadsPerSection == 0)) {
// Add section threads to the executor
executor.execute(new BrowseSection(filter, webClient, subsectionUrl));
} else {
executor.shutdown();
try {
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
// We should normally never get here
}
}
}
時executor.execute()
被調用時,如果線程池充滿運行的線程會發生什麼?
上面的代碼不檢查線程是否仍在執行程序中運行,而是線程數量已經啓動。
,數量線程受限於this.noOfThreads。它永遠不會比這更大 –
noOfThreads是在給定時間運行的一批線程的大小(假設有更多部分)。但是,如果節的數量大於this.noOfThreads,並且線程仍未完成,那麼執行if時會發生什麼情況?執行程序是否等待某些線程完成或不完成? – Sebi
您可以閱讀更多關於ThreadPoolExecutor的信息:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html –