線程池面試題
一個線程池的核心線程數為10個,最大線程數為20個,阻塞隊列的容量為30。現在提交45個 任務,每個任務的耗時為500毫秒。 請問:這批任務執行完成總共創建幾個線程? 請問:這批任務執行完成總計需要多少時間? 注:忽略線程創建、調度的耗時。
答案 總耗時計算
由于核心線程數為 10 個,最大線程數為 20 個,阻塞隊列容量為 30。
前 10 個任務可以直接由核心線程并發執行,耗時 500 毫秒。
還剩35個任務,接下來 30 個任務進入阻塞隊列,隊列滿,而此時還有 5 個任務,會創建新線程執行,這 5 個任務中最后一個完成也需要 500 毫秒。
因為,忽略線程創建、調度的耗時。 執行完成這15個線程,耗時大約500毫秒。
當這 10 個核心線程,5個非核心線程,完成任務后,會從隊列中取出15任務執行,耗時大約500毫秒。 這15線程執行完成后,再從阻塞隊列取出最后15 個任務,完成需要耗時 500 毫秒。
所以總共耗時500 毫秒+ 500 毫秒 + 500 毫秒 = 1500 毫秒,即 1 .5秒。
答案 創建線程數
首先 10 個核心線程會被創建來執行前 10 個任務。
當提交 45 個任務,前 10 個任務被核心線程執行后,還有 35 個任務,此時 30 個任務進入阻塞隊列,隊列滿后,還剩下 5 個任務,會創建 5 個新線程來執行這 5 個任務。
所以總共創建了 10 + 5 = 15 個線程。