如何将死亡线程恢复为可运行状态的所有可能方法。
如果您查看线程生命周期图像,则一旦线程终止,就无法返回到新位置。
因此,没有办法将已死亡的线程带回可运行状态,而应该创建一个新的线程实例。
根据JavaDocs的说明...
在任何情况下都不能启动同一个线程超过一次。特别是,一旦线程执行完成,它就不能重新启动。
您需要启动一个全新的实例。
最好将要执行的操作封装在Runnable
接口中,这样您就可以简单地将Runnable
传递给新的Thread
实例。
我猜您扩展了Thread
类并重写了run
方法。如果您这样做,那么您将可运行代码与Thread
的生命周期绑定在一起。由于Thread
无法重新启动,因此每次必须创建一个新的Thread
。更好的做法是使用Runnable
接口将要在线程中运行的代码与Thread
的生命周期分离。
只需在实现Runnable
的类中提取run
方法即可。然后你就可以轻松地重新启动它。
例如:
public class SomeRunnable implements Runnable {
public void run(){
... your code here
}
}
SomeRunnable someRunnable = new SomeRunnable();
Thread thread = new Thread(someRunnable);
thread.start();
thread.join(); // wait for run to end
// restart the runnable
thread = new Thread(someRunnable);
thread.start();
这种做法也使得如果您需要记住之前的运行状态变得更加容易。
public class SomeRunnable implements Runnable {
private int runs = 0;
public void run(){
runs++;
System.out.println("Run " + runs + " started");
}
}
提示:使用java.util.concurrent.Executor
来执行Runnable
。这将把线程管理与执行分离。
Executor executor = Executors.newSingleThreadExecutor();
...
SomeRunnable someRunnable = new SomeRunnable();
executor.execute(someRunnable);
请查看执行者接口
线程是一种独立于其他线程执行的轻量级进程。一旦它的执行完成,就没有任何方法可以重新启动它。
线程在其生命周期内有许多不同的状态。
1 新生状态
2 可运行状态
3 运行状态
4 阻塞状态
5 完成状态
线程应该处于以上任何一种状态,并且可以通过不同的方法和方式从一个状态转移到另一个状态。
当线程执行完其run()方法后,该线程的生命周期结束。
我们可以通过调用stop()方法来终止特定线程并将其置于完成状态。
Runnable
),然后将该对象传递给新线程。 - phs