fun a(){
//局部变量b
val b = B()
Thread {
Thread.sleep(100000)
//2.这时会被回收吗
b.b()
}.start()
b.b()
//1.a方法执行完毕,这时会被回收吗
}
}
fun main() {
//调用A的a方法
A().a()
}
假设线程无限长,无限调用a方法,如果在1处回收,那么执行到2时b就是报空指针,如果在2处回收,那么b会把内存撑爆,对吗
记住一句话就很好理解了:所有非守护线程都执行完毕后,JVM就会自动退出。
这里没有设置子线程为守护线程,所以主线程会等待子线程执行完
对象还存在引用(或被其他对象使用),这时候就不会被回收,
https://www.cnblogs.com/igoodful/p/8727241.html
看完应该有收获