它可以在它死后重新开始吗?

如果我在Thread对象上使用start()并且run()方法返回,是否可以再次调用start()?

例如,

MyThread myThread = new MyThread(); myThread.start(); // run method executes and returns in 2 seconds // sleep for 5 seconds to make sure the thread has died myThread.start(); 

我只是想知道因为我的代码抛出了IllegalThreadStateExceptions,所以想知道是不是因为你不能做到这一点。

不,你不能。 Thread.start()方法的Javadoc告诉你!

来自评论:

还有什么我可以做的重新启动一个线程?

您可以使用ThreadPoolExecutor ,它允许您传入任务并让服务将线程分配给任务。 任务完成后,线程将进入空闲状态,直到完成下一个任务。

因此,您不重新启动线程,但您将重做/恢复任务。

不。

从Javadoc for java.lang.Thread :

不止一次启动线程永远不合法。

来自javadoc:

不止一次启动线程永远不合法。 特别是,一旦完成执行,线程可能无法重新启动。

有关更多信息,请参见Thread.start() javadoc。

还有其他方法可以完成您要做的事情。 例如,您可以使用新的线程来继续在已完成执行的线程中完成的工作。 您可能还想研究java.util.concurrent包 。

如果您希望线程多次停止并重新启动,也许有更好的方法可以执行此操作。 我在C ++中有一个tile缓存线程,它做了类似的事情。 它在完成后暂停,在需要时暂停。 我是Java的新手,但据我所知,你可以使用Object.wait()来暂停,而Object.notify()来恢复线程。 也许您可以在文档中检查这些并重新设计您的线程以暂停和恢复而不是退出。