美文网首页
线程启动的资源的回收

线程启动的资源的回收

作者: 不知名的蛋挞 | 来源:发表于2018-12-08 20:14 被阅读16次

    全局资源的回收

    【情景】

    进程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了。

    相关文章

      网友评论

          本文标题:线程启动的资源的回收

          本文链接:https://www.haomeiwen.com/subject/avthqqtx.html