線程池大小對系統(tǒng)性能是有一定影響的,過大或者過小都會無法發(fā)揮最優(yōu)的系統(tǒng)性能, 線程池大小不需要非常精確,只要避免極大或者極小的情況即可, 一般來說,線程池大小需要考慮CPU數(shù)量,內(nèi)存大小等因素. 在書中給出一個估算線程池大小的公式:
線程池大小 = CPU的數(shù)量 * 目標CPU的使用率*( 1 + 等待時間與計算時間的比)
如果在線程池中執(zhí)行的任務A在執(zhí)行過程中又向線程池提交了任務B, 任務B添加到了線程池的等待隊列中, 如果任務A的結(jié)束需要等待任務B的執(zhí)行結(jié)果. 就有可能會出現(xiàn)這種情況: 線程池中所有的工作線程都處于等待任務處理結(jié)果,而這些任務在阻塞隊列中等待執(zhí)行, 線程池中沒有可以對阻塞隊列中的任務進行處理的線程,這種等待會一直持續(xù)下去,從而造成死鎖。
適合給線程池提交相互獨立的任務,而不是彼此依賴的任務. 對于彼此依賴的任務,可以考慮分別提交給不同的線程池來執(zhí)行。