240 发简信
IP属地:上海
  • 其实没明白你讲的每个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开发中,...

  • Spring源码解读(3)AOP-切面类的注解处理

    1、概述     Aop是面向接口的,也即是面向方法的,实现是在IOC的基础上,Aop可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离,...

  • Spring源码解读(2)-IOC容器bean的实例化

    1、概述     上一节分析了Spring如何读取xml配置文件并最终将配置的POJO类生成一个个BeanDefinition注册到IOC容器的过程,主要是针对直接配置在xm...

  • Spring源码解读(1)-IOC容器BeanDefinition的加载

    1、概述     spring的两大核心:IOC(依赖注入)和AOP(面向切面),IOC本质上就是一个线程安全的hashMap,put和get方法就对应IOC容器的bean的...