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

线程启动的资源的回收

作者: 不知名的蛋挞 | 来源:发表于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了。

相关文章

  • 线程启动的资源的回收

    全局资源的回收 【情景】 进程A启动3个业务线程去加载ApplicationContext变量,启动Spring容...

  • 多线程资源释放

    正常释放 等待线程执行结束,和回收资源。 线程在函数执行结束以后,需要回收资源。线程有两种状态joinable和u...

  • juc系列-Executor框架

    什么是线程池 线程池:管理一组工作线程的资源池。 为什么使用线程池 1.避免反复创建回收线程,降低资源消耗。2.提...

  • Java学习笔记_2

    多线程。线程是进程中的一个执行单元(执行路径),可以并发。System.gc();申请启动垃圾回收器,垃圾回收器比...

  • ZGC源码分析(3)- ZGC触发的时机

    ZGC以被动回收为主,即由后台线程控制何时启动垃圾回收。 ZGC的触发时机在 jdk11/src/hotspot/...

  • 006-线程池

    背景 无限制的创建线程消耗系统资源 创建线程、回收线程均需要时间 线程池 是在后台执行多个任务的线程集合。1)最大...

  • JVM 中的守护线程

    特点通常由JVM启动运行在后台处理任务,比如垃圾回收等用户启动线程执行结束或者JVM结束时,会等待所有的非守护线程...

  • 这份阿里技术官强推的java线程池笔记,建议你看一下,对工作太有

    线程池 线程是宝贵的内存资源,单个线程占1MB空间,过多分配易造成内存溢出 频繁的创建及销毁线程会增加虚拟机回收频...

  • PHP面试遇到面试官的swoole协程三连问,快哭了!

    什么是进程? 进程就是应用程序的启动实例。独立的文件资源,数据资源,内存空间。 什么是线程? 线程属于进程,是程序...

  • 2018-05-18 Linux之线程分离

    任何时间点上线程是可结合(pthread_joined)的,同属一个进程下的线程可以被另一个线程回收资源或者杀死。...

网友评论

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

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