其实没明白你讲的每个Woker为什么要加锁那部分内容,shutdown和getTask ,一个是中断空闲线程,一个是从队列获取任务,如果阻塞队列为空,线程会调用队列take方法阻塞住当前线程,那在shutdown和tryTerminate中调用interruptIdleWorkers方法时,也只会将空闲线程中断,此时阻塞住的线程已经不可能在这些方法里面被唤醒再去执行getTask方法了,所以也就不可能会抛出异常(shutdownNow才会抛出异常),阻塞住的线程也没办法关闭了,所以使用shutdown肯定不能将阻塞的线程关闭掉的,所以当然也就不能成为Worker需要加锁的原因,所以我更认同其他地方说的,Worker加锁的主要原因应该是避免正在执行任务的线程被线程池的修改操作干扰,导致执行任务线程不安全的被关闭,比如setCorePoolSize,但是setCorePoolSize也调用了interruptIdleWorkers,所以我不是很理解这个锁具体的作用是什么
深入理解Java线程池:ThreadPoolExecutor博客链接:http://www.ideabuffer.cn/2017/04/04/深入理解Java线程池:ThreadPoolExecutor/ 线程池介绍 在web开发中,...