为什么java不支持重新启动线程

时间:2012-04-06 10:49:25

标签: java multithreading restart

  

可能重复:
  How to start/stop/restart a thread in Java?

1.如果在正在运行的线程上调用start(),则会出错 2.如果在已停止的线程上调用start(),则不会发生任何事情。

不支持在同一个对象上重启的原因是什么?

2 个答案:

答案 0 :(得分:1)

我认为设计人员之所以这样做是因为操作系统级线程通常以这种方式运行 - 它们被创建,它们可能会运行,然后它们被破坏并且操作系统执行清理。因此,Java设计人员可能希望Java中的线程概念接近大多数操作系统中的线程。方法start()stop()并不意味着暂停线程(我们有同步),只是为了让它运行并销毁对象。也许名字有​​点令人困惑。请注意,stop()已弃用且不应使用,因此,如果我们取消stop(),则名称start()不再令人困惑。

答案 1 :(得分:0)

成为Thread.run()方法背后的想法。这个想法是每个线程都有生命周期,如果它到期(完成run()方法块),线程就会死掉。    如果你想为一个时间分区停止线程然后再次运行它常见的方法是实现Runnable接口(或扩展Thread类)并在里面得到一个布尔标志。    这是一个简单的代码:

public class MyThread implements Runnable {
    private Thread t;
    private boolean isRestarted;
    private boolean isInterrupted;

    public MyThread() {
           t = new Thread(this);
           isInterrupted = false;
           isRestarted = false;
           t.start();
    }

    public void run() {
       //Do somework
       while(true) {
         if(isInterrupted) break;
         if(isRestarted) run();
       }
    }

    public void restart() { isRestarted = true; }
    public void interupt() { isInterrupted = true; }
 }

现在当线程没有被中断时,它将等待重新启动。当你中断它时,它不能再重新启动。