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