线程启动的资源的回收

全局资源的回收

【情景】

进程A启动3个业务线程去加载ApplicationContext变量,启动Spring容器,ApplicationContext类的加载使用了单例模式的写法。也就是ApplicationContext变量的加载就由启动最快的线程去加载,剩下的两个线程就使用这个加载过的ApplicationContext变量就好了。

假如此时ApplicationContext变量已经被线程A(最快的线程)成功初始化了(Spring容器已经启动了),如果此时线程A突然被Thread.stop()停掉了,那这个ApplicationContext实例对象是否还存在(Spring容器是否还在跑)呢?

【解答】

ApplicationContext变量也不会被回收,因为ApplicationContext变量是静态的,是属于整个系统的。所以即使线程A没了,但是由它Spring容器还是在跑的。

局部资源的回收

【情景】

进程A启动3个业务线程去调用A()方法,A()方法里面有一个局部变量ExecutorService线程池,操作就是启动它,去执行某一个job。ExecutorService线程池是一个方法中的局部变量。

如果此时这3个线程都成功调用这个a()方法并已经成功初始化ExecutorService对象,但是还没有shutdown。如果此时线程A突然被Thread.stop()停掉了,那么线程A启用的ExecutorService线程池对象是否还存在呢?如果存在那么这个ExecutorService线程池对象有没有被shutdown()还是处于正在连接的状态?

【解答】

线程A被Thread.stop()停掉之后,其栈中的ExecutorService对象是已经不存在了,所以也不用关心有没有被shutdown了。而线程B和线程C的ExecutorService对象可能还在,也可能已经被shutdown了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,169评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,159评论 6 342
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,911评论 1 14
  • 遥远黑夜的尽头闪起焰火。 她看着远方天空里面的璀璨,那种光芒很像他眼里面的光。烟花圆满又灿烂的样子像他写出来的字,...
    韶华呀阅读 15,093评论 0 10

友情链接更多精彩内容