场景:比如固定设置1个线程,有10个线程提交。a先执行完,9个等待的线程抢到a的资源后,不会再重开一个线程,会重新走一遍run方法。
newFixedThreadPool 这种固定线程数量的线程池,不会回收线程资源,如果执行中的任务完成,排队的任务会进来继续利用空闲的线程资源,线程名称等一切依然是原来那个线程的。所以不会再调一次new Thread方法。直接重走一遍原来的那个thread的run实现(划重点,不重新分配资源,但会从runt方法重新执行)
解决方法:
run的实现类的子方法里面,通过对BlockingQueue的管理来获得前期放入的线程名称。