我创建了一个单独的线程,并且一个方法将此线程调用到.start()
,在线程完成其工作之前可能会再次调用此方法。
我在return;
内添加了run()
,因此当它完成工作并再次启动时会死亡。但是当我在完成工作后尝试启动它时,它会给我一个IllegalThreadStateException
。线程没有关闭吗?我想添加return;
会将其关闭。
答案 0 :(得分:0)
来自Javadoc:
使该线程开始执行; Java虚拟机调用此线程的run方法。
结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。
不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。
抛出: IllegalThreadStateException - 如果线程已经启动。
仔细看看最后两句话,你会找到答案。
答案 1 :(得分:0)
When you wish to stop the thread, you set this flag and call join() on the thread and wait for it to finish.
来自How to properly stop the Thread in Java?
线程对象只能启动一次。如果你需要 停止/中断一个线程,然后想再次启动它,你应该 创建一个新实例,并在其上调用start():
thread.interrupt(); // if you need to make sure thread's run() method stops ASAP thread = new MyThreadSubclass(); thread.start();
来自Stop thread and again start giving IllegalThreadStateException in blackberry
答案 2 :(得分:0)
您不能多次在同一个Thread对象上调用start。如果你有时需要在一个单独的线程上多次完成一些工作,但是还必须在运行之间存储状态,那么你可以实现一个Runnable
而不是Thread
(假设&# 39; s你在做什么)。之后,只要您需要再次执行工作并在新Runnable
对象上调用Thread
,就可以将相同的start()
实例传递给新的Thread
对象。