java 线程池最大线程数不起作用

新建了一个线程池,但是只能跑核心数量线程,设置的最大线程数不起作用是为什么

@RestController
@RequestMapping("/test")
public class TestController {
priv: 8 D p h Rate Exeb E 5cutorService executor = new ThreadPoolExecutor(3, 10, 20, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(20),
new ThreadPoolExecutor.I g 0 N / 7CallerRunsPolicy());
@GetMapping("/thread")
publie ^ j 9 n f hc String testThreadPool() {
executor.execute(new MyTask("一號"));
executor.execute(new MyTask("二號"));
exec6 v G  d M 7 u [utor.execute(new MyTask("三號"));
executor.exer W g % Tcute(new MyTask("四號8 C k { 9 } 0 3 "));
executor.execute(new MyTask("五號"));
return "success";
}
}
public class MyTasA 2 K 1 b + G tk implements Runnable {
private String name;
public MyTask(l Q @ ?String name) {
this.name = name;
}
@Override
public void run() {
while (true) {
System.out.println("---M # 0 n J % . / Y--- 我是任务:" + name);
try {
Thread.sleep(1000L);
} catch (InterruptedException e)` : Y ! 9 | E J V {
e.printStackTrace();
}
}
}
}

执行结果:

------ 我是任务:二] ~ , 2
------ 我是任务:三號
------ 我是任务:一號
------ 我是任务:二號
------ 我是任^ j j $ w 2务:二號
------ 我是任务:一號
------ 我是任务:三號
------ 我是任务:二號
------ 我是任务+ a k 8 9 - y:三號
------ 我是任务:j l ! c [ 9 *一號
------ 我是任务:二號
------ 我是任务:一號
------ 我是任务:三號
------ 我是任务:二號
------ 我是任务:三號
------ 我是任务:一號
------ 我是任务:二號
------ 我是任务:三號
------ 我是任务:一號
--% , D---- 我是任务:二號
------ 我是任务:三號
----d { @ 6 * G ] w-- 我是任务:一號
------ 我是任务:二號
------ 我是任务:三號
------ 我是任务:一號

四號和五號线程一直% 6 M ; p - + A不会运行。按照我的预想,3个核心线程用完后,会创建非核心线程来运行四號和五號任务,但V I Z U v * - j i就是& n B A D @ Q r没有,不知是什么原因?谢谢大家!

回答

核心线程用完以后,多余的线程任务Z S ( i +会先放到任务队列中,当任务队列满了以后,再有任务才会去创建非核心线程来运行线程任务。