線程池的目的:
當并發(fā)請求數(shù)量較多秆麸,而每個線程的執(zhí)行時間比較短爵政,這樣就會頻繁的創(chuàng)建和銷毀線程,加大的開銷蓝谨,降低了系統(tǒng)的效率灌具。而線程池的出現(xiàn)青团,可以使一個任務在使用完畢后不銷毀線程譬巫,還可以在其他任務來到時,不用創(chuàng)建督笆,去使用已有的線程芦昔。線程池解決了線程的生命周期的開銷和資源不足的問題。
當單個任務處理時間較短娃肿」径校或是任務量很大的時候我們可以去使用線程池
線程池的好處:
-
降低資源消耗。通過重復利用已創(chuàng)建的線程降低線程創(chuàng)建和銷毀造成的消耗料扰。
-
提高響應速度凭豪。當任務到達時,任務可以不需要的等到線程創(chuàng)建就能立即執(zhí)行晒杈。
-
提高線程的可管理性嫂伞。線程是稀缺資源,如果無限制的創(chuàng)建,不僅會消耗系統(tǒng)資源帖努,還會降低系統(tǒng)的穩(wěn)定性撰豺,使用線程池可以進行統(tǒng)一的分配,調優(yōu)和監(jiān)控拼余。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}
corePoolSize:線程池維護線程的最少數(shù)量
maximumPoolSize:線程池維護線程的最大數(shù)量
對于每一個任務提交污桦,判斷的順序為 corePoolSize --> workQueue --> maximumPoolSize。
當前線程數(shù)<corePoolSize 那么即時有空閑線程也要創(chuàng)建新的線程匙监。
當前線程數(shù) >核心線程數(shù)凡橱,阻塞隊列為空,那么此時將任務放到隊列中亭姥,等到其他任務完成以后再運行它們梭纹。有空余的線程將從隊列中取。
當前線程數(shù) >核心線程數(shù), 阻塞隊列滿致份,但線程池中的數(shù)量小于最大線程數(shù)变抽,建新的線程來處理添加的任務。
當前線程數(shù) >核心線程數(shù), 阻塞隊列滿氮块,但線程池中的數(shù)量等于最大線程數(shù)绍载,使用handler處理被拒絕的任務。
當線程池中的線程數(shù)量大于corePoolSize時滔蝉,如果某線程空閑時間超過keepAliveTime击儡,線程將被終止。這樣蝠引,線程池可以動態(tài)的調整池中的線程數(shù)阳谍。
5401975-4493820fd31f3127.png
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者