1、当你的任务超过核心线程剩余任务就在队列等待,复用核心线程数去完成剩余等待任务,(前提是任务数在核心线程数加队列容量范围);2、当你的任务数大于核心线程且大于队列容量,这时候就会变成max线程数去完成等待的队列(前提是任务数在max线程数+队列之间);等待时间结束时线程池的线程数量为max大于核心线程数的部分会被销毁,队列所有任务执行结束时核心线程会处于阻塞等待状态,(gettask方法调用了队列容器的take()方法实现阻塞);
最重要的线程复用原理就是 源码里的内部类Worker里面的runwork里面是个while循环判断gettask里面去执行,所以实现了复用;
复用的可以自己写个简单的代码增加理解,
1、假设有两个工人A和B, 那你代码可以新建两个线程,且线程的run里面写个while循环执行任务,这里的任务你可以是一个队列容器,你可以用LinkedList这个容器,循环去判断容器大小再去removefirst这个(加上锁)容器最好加个sleep几秒,不然太快了。。。
2、mian里再搞个for循环往LinkedList里丢东西搞个十几个应该差不多了
3、整体就是new两个线程去操作容器,也就达到了两个线程复用去执行这十几个任务