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