java线程完成后会被删除

时间:2010-09-28 04:07:04

标签: java multithreading concurrency

假设我使用下面的方法每隔几秒生成一个线程,每个线程需要大约一秒钟才能完成。完成的线程是否被删除?

new Thread (new myRunnableClass()).start();

3 个答案:

答案 0 :(得分:9)

一旦线程完成,就会释放本机的OS级线程(大约在run()完成时),但线程对象与任何其他对象一样,直到它变得无法访问并且垃圾收集器感觉像运行

编辑:知道Thread(在 Sun的 Oracle的实现中,anywho)有一个私有方法,当VM调用时,也可能会很有趣。线程退出,它积极地使几个字段为空,包括引用Runnable构造函数设置的Thread(Runnable)的字段。因此,即使您保留对Thread的引用,也将释放完成执行后不需要的内容,无论如何。

答案 1 :(得分:7)

我不会把它称为删除。一旦线程完成,它将进入死状态,准备好由JVM进行垃圾收集。

答案 2 :(得分:2)

产生一个新线程是一个非常昂贵的过程。你想要的是一个线程池。有不同的方法可以解决这个问题 - here's one