线程池面试题
一个线程池的核心线程数为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 个线程。