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

时间:2011-03-22 22:07:56

标签: java multithreading

如果我在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,所以想知道是不是因为你不能做到这一点。

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

来自评论:

  

我还有什么办法可以重新启动一个帖子吗?

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

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

答案 2 :(得分:0)

不。

来自Javadoc for java.lang.Thread

  

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

答案 3 :(得分:0)

来自javadoc:

  

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

有关详细信息,请参阅Thread.start() javadoc。

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

答案 4 :(得分:-1)

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