Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading join方法后重新启动java线程_Multithreading_Join_Kill Process - Fatal编程技术网

Multithreading join方法后重新启动java线程

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

我想知道如何重新启动这个线程 我使用join方法终止了线程,但出现了以下异常: 线程“main”java.lang.IllegalThreadStateException中的异常 线程的管理器:

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线程只能执行一次


如果您想再次运行它,请围绕相同的
Runnable

Thread
。@SLaks考虑到线程是一个相当重的对象,不确定这是否是一个好主意…@SLaks:可能,但我会尽量避免它。将沿着这些行进行编辑。那么如何在这种情况下使用join方法?@user2625638:在什么情况下?@SLaks
new-Thread(oldThread)
可以工作,但这不是最干净的方法,第三次失败时,我尝试了两次以上,我不得不用
Runnable
替换它,为什么要做一件非常奇怪的事情——在一个while(true)循环中顺序运行两个线程,等待每个线程以join()终止?为什么不启动一个线程,只启动一次,其run()方法包含while(true)并从thread1和thread2顺序调用代码?没有join(),没有连续的线程创建/终止/销毁。@user2625638:与在任何其他线程上调用
join()
的方式相同。但是,如果您启动一个线程,然后立即
join()
它,您就不会从使用该线程中获得任何好处。因为我在
runnable
类中更改了一个重要值(这使得
线程首先停止)。因此,我不能只使用同一个。我必须重新实例化
runnable
,然后在新的
runnable
上创建一个新的
线程。