如何重新启动死线程?

Rak*_* KR 17 java multithreading

死线程恢复到可运行状态的所有不同可能性是什么.

Nar*_*gis 48

线程生命周期图像

如果你看一下线程生命周期图像,一旦你的线程终止,你就无法回到新的位置.

所以没有办法将死线程恢复到可运行状态,而是应该创建一个新的Thread实例.

  • 你能给出这张图片的来源吗? (7认同)
  • +1好帖子.@Uooo打开此链接(http://faculty.inverhills.mnscu.edu/speng/cs1127/Notes/Ch23/LifeCycle.htm)并点击UML图表 (3认同)

Mad*_*mer 12

来自JavaDocs ......

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

你必须开始一个全新的实例.

优选地,您要执行的操作应该包含在Runnable接口中,这样您就可以简单地将其传递Runnable给新的实例Thread


Ren*_*ink 10

我猜你扩展了这个Thread类,你已经覆盖了这个run方法.如果你这样做,你就可以将可运行的代码绑定到Thread生命周期.由于Thread无法重新启动,您必须Thread每次都创建一个新的.更好的做法是Thread使用Runnable接口将代码分离为在生命周期的线程中运行.

只需run在实现的类中提取方法即可Runnable.然后你可以轻松重启它.

例如:

 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();
Run Code Online (Sandbox Code Playgroud)

如果您需要记住以前的运行状态,这种做法也很容易.

public class SomeRunnable implements Runnable {

      private int runs = 0;

      public void run(){
          runs++;
          System.out.println("Run " + runs + " started");
      }
 }
Run Code Online (Sandbox Code Playgroud)

PS:用a java.util.concurrent.Executor来执行Runnables.这将使线程管理与执行分离.

 Executor executor = Executors.newSingleThreadExecutor();

 ...

 SomeRunnable someRunnable = new SomeRunnable();
 executor.execute(someRunnable);
Run Code Online (Sandbox Code Playgroud)

看一下Executor Interfaces


小智 5

该线程是一个单独的轻量级进程,无论其他线程如何,它都独立执行.一旦执行完成,就没有办法重新启动它.