假设我使用下面的方法每隔几秒生成一个线程,每个线程需要大约一秒钟才能完成。完成的线程是否被删除?
new Thread (new myRunnableClass()).start();
答案 0 :(得分:9)
一旦线程完成,就会释放本机的OS级线程(大约在run()
完成时),但线程对象与任何其他对象一样,直到它变得无法访问并且垃圾收集器感觉像运行
编辑:知道Thread
(在 Sun的 Oracle的实现中,anywho)有一个私有方法,当VM调用时,也可能会很有趣。线程退出,它积极地使几个字段为空,包括引用Runnable
构造函数设置的Thread(Runnable)
的字段。因此,即使您保留对Thread
的引用,也将释放完成执行后不需要的内容,无论如何。
答案 1 :(得分:7)
我不会把它称为删除。一旦线程完成,它将进入死状态,准备好由JVM进行垃圾收集。
答案 2 :(得分:2)
产生一个新线程是一个非常昂贵的过程。你想要的是一个线程池。有不同的方法可以解决这个问题 - here's one。