而这个方法里面会执行 remove 的操作。
于是线程就被回收了。
所以当超过指定时间后,线程会被回收。
那么被回收的这个线程是核心线程还是非核心线程呢?
不知道。
因为在线程池里面,核心线程和非核心线程仅仅是一个概念而已,其实拿着一个线程,我们并不能知道它是核心线程还是非核心线程。
这个地方就是一个证明,因为当工作线程多余核心线程数之后,所有的线程都在 poll,也就是说所有的线程都有可能被回收:
另外一个强有力的证明就是 addWorker 这里:
core 参数仅仅是控制取 corePoolSize 还是 maximumPoolSize。
所以,这个问题你说怎么回答:
JDK 区分的方式就是不区分。
那么我们可以知道吗?
可以,比如通过观察日志,前面的案例中,我就知道这两个是核心线程,因为它们最先创建:
- Thread[test-1-1,5,main]-执行任务
- Thread[test-1-2,5,main]-执行任务
在程序里面怎么知道呢?
目前是不知道的,但是这个需求,加钱就可以实现。
自己扩展一下线程池嘛,给线程池里面的线程打个标还不是一件很简单的事情吗?
只是你想想,你区分这玩意干啥,有没有可落地的需求?
毕竟,脱离需求谈实现。都是耍流氓。
最后说一句
才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以在后台提出来,我对其加以修改。
感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。