线程池会被回收吗?

失_心_疯 发布于 2021/12/09 18:32
阅读 881
收藏 0

请问下线程池中的线程执行完后,执行shutdown方法后,线程池本身也会被回收掉吗?

加载中
1
ArchitectureMaster
ArchitectureMaster

那就要看线程池这个对象有没有触发Java内存回收条件了!

首先题主需要了解回收的机制,线程池在内存中也只是一个java对象,并没有其它特权。你的对象设置为null就能被回收吗?答案是不一定的。对象是指在Leap中分配的内存空间,Object obj = new //是将这段leap地址的首地址赋值给引用obj。而obj本身如果是实例对象则存在于Stack上。如果设置obj为null 则只是将这段stack上的地址设置为可回收,而对于leap上的内容不会有任何影响。打比方a和b都引用了堆上的内存,你把a设置为null了,那b仍然可以使用,因为堆上的真正内容并未被回收。

java自动gc的原理是一段在堆上的内存没有任何引用指上它,这时就会被回收掉。即Object a =new Ojbect(); Object b =a;这时你除非把a和b都设为null那这段在堆上的内存会被回收。

同样的道理,线程池既然是对象,也要遵循这个原则即只有这个对象没有任何引用指向它它就会被释放!

0
ducat7
ducat7

都仅仅被标记为空闲,不会立即被回收

0
s
shuaizai88
不运行,没有别的线程引用此 线程对象就会释放。
0
kakai
kakai

可参看 java.util.concurrent.ThreadPoolExecutor 的实现,里面就有线程的回收策略

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部