Multithreading join方法后重新启动java线程
我想知道如何重新启动这个线程 我使用join方法终止了线程,但出现了以下异常: 线程“main”java.lang.IllegalThreadStateException中的异常 线程的管理器:Multithreading join方法后重新启动java线程,multithreading,join,kill-process,Multithreading,Join,Kill Process,我想知道如何重新启动这个线程 我使用join方法终止了线程,但出现了以下异常: 线程“main”java.lang.IllegalThreadStateException中的异常 线程的管理器: public void manage() { while(true) { thread1.start(); try { thread1.join(); } catch (InterruptedException e
public void manage() {
while(true)
{
thread1.start();
try {
thread1.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread2.start();
try {
thread2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
不能在Java中重新启动线程。一旦完成,就完成了 相反,您应该使用相同的
Runnable
创建一个新的线程
,然后启动新线程。编辑:虽然您可能会使用“old”Thread
对象作为运行新线程的Runnable
,但如果可能,我会避免这样做。我尽量使运行
和线程
保持非常独立;我认为这是一个设计错误,您甚至可以通过扩展它来创建线程
,而线程
实现了可运行
注意,加入一个线程并不会杀死它——它只是等待它完成。它们是非常不同的操作。当一个线程(X)加入另一个线程(Y)时,Y中没有任何东西在等待它终止的迹象——甚至没有提示它应该尝试停止。Java线程只能执行一次
如果您想再次运行它,请围绕相同的
RunnableThread
。@SLaks考虑到线程是一个相当重的对象,不确定这是否是一个好主意…@SLaks:可能,但我会尽量避免它。将沿着这些行进行编辑。那么如何在这种情况下使用join方法?@user2625638:在什么情况下?@SLaksnew-Thread(oldThread)
可以工作,但这不是最干净的方法,第三次失败时,我尝试了两次以上,我不得不用Runnable
替换它,为什么要做一件非常奇怪的事情——在一个while(true)循环中顺序运行两个线程,等待每个线程以join()终止?为什么不启动一个线程,只启动一次,其run()方法包含while(true)并从thread1和thread2顺序调用代码?没有join(),没有连续的线程创建/终止/销毁。@user2625638:与在任何其他线程上调用join()
的方式相同。但是,如果您启动一个线程,然后立即join()
它,您就不会从使用该线程中获得任何好处。因为我在runnable
类中更改了一个重要值(这使得线程首先停止)。因此,我不能只使用同一个。我必须重新实例化runnable
,然后在新的runnable
上创建一个新的线程。