一个尚未启动的新线程对象会被垃圾回收吗?
Posted
技术标签:
【中文标题】一个尚未启动的新线程对象会被垃圾回收吗?【英文标题】:A new thread object that has not been started will be garbage collected? 【发布时间】:2015-11-13 11:09:47 【问题描述】:我有来自 Java 虚拟机的源代码。这个虚拟机只有满足这些条件(两个条件)的垃圾收集线程:
线程已完成(开始和完成) 线程对象没有任何引用我认为它应该用 no refence 垃圾收集 未启动的线程。但是这些线程被保存在 VM 内存中。对吗?
示例代码:
public class Test implements Runnable
private Thread thread;
public Test()
thread = new Thread(this);
@Override
public void run()
//This thread never runs...
//My question is about garbage collector in a situation like this...
考虑:
测试对象不再有引用 Test 对象线程从未启动测试线程会被垃圾回收吗?
【问题讨论】:
我正在创建一个虚拟机,所以我需要了解这个概念。出于这个原因,我在这里寻求帮助:)Thread
实例不是真正的线程,它是控制线程的api。一旦有一个正在运行的线程,您的 Thread
对象将被“从线程”引用,并且在这种情况下不能被 GC。
【参考方案1】:
Thread
或 Runnable
类的实例类似于任何其他类的实例。所以,是的,如果引用超出范围,它将被 GCed。
注意:您首先必须创建一个Test
的实例。
running 线程作为 GC 的根,不会被 GC。它启动线程(通过调用start()
,它实际上创建了一个执行线程并使它变得特别。
【讨论】:
@GabrielDias - 未启动的线程与任何其他对象一样,将以这种方式进行 GC。 正在执行的线程不会被 GC,因为正在运行的线程将充当 GC 根以上是关于一个尚未启动的新线程对象会被垃圾回收吗?的主要内容,如果未能解决你的问题,请参考以下文章