非核心线程数啥时候启用?

线程池的参数是什么可以说是当面试官准备问你线程池相关问题的时候一个必问的知识点了,

非核心线程数什么时候启用?

就是在基本参数问完还想深入问的话,又一个常问的问题

其实并不难

非核心线程数什么时候启用呢?我们可以通过下面这个面试题来理解一下:

假设我们设置的线程池参数为:corePoolSize=10, maximumPoolSize=20,queueSize = 10
20个并发任务过来,有多少个活跃线程?

10个。corePoolSize打满,queueSize 也满

21个并发任务过来,有多少个活跃线程?

11个。corePoolSize打满,queueSize 也满还多一个,maximumPoolSize = 20,所以corePoolSize + 1此时活跃的为11个。

30个并发任务过来,有多少个活跃线程?

20个。corePoolSize打满,queueSize 也满,corePoolSize扩充至20,此时有20个活跃任务。

31个并发任务过来,有多少个活跃线程?

20个。corePoolSize打满,queueSize 也满,corePoolSize扩充至20还多一个,如果是丢弃策略,此时有20个活跃任务。

也就是说,任务过来,首先是活跃线程数先启用。如果活跃线程数不够用,那么往任务队列里塞,如果任务队列也塞满了,那么非核心线程数才启用。

注:最大线程数指的是核心+非核心

所以如果你要算非核心,需要用maximumPoolSize - corePoolSize

当核心非核心线程都弄完,任务队列也塞满了,那拒绝策略才会开始生效。

你可能感兴趣的:(java技术,java,面试,开发语言,线程池,程序员)