通过扩展Thread类

时间:2015-09-18 17:32:17

标签: java multithreading

我关注class‍

public class Thread1 extends Thread {
  @Override
  public void run() {
    System.out.println("I am the first thread");
  }

 public static void main(String args[]) {
    Thread1 t = new Thread1();
    t.start();  
    }
}

如果我运行上述程序,它将以新线程

打印
"I am the first thread"

现在主要是如果我尝试两次启动相同的线程,它将抛出java.lang.IllegalThreadStateException

现在我将通过覆盖start()方法

重写Thread1类
public class Thread1 extends Thread {
  @Override
  public void run() {
    System.out.println("I am the first thread");
  }

  @Override
  public void start() {
    System.out.println("I am the Start");
  }

  public static void main(String args[]) {
    Thread1 t = new Thread1();
    t.start();  
    t.start();  
    }
  }

现在,如果我两次调用start()方法,输出将为:

  I am in start
  I am in start

上述程序抛出任何异常。任何人都可以解释我这种行为。为什么它没有启动新线程。似乎很简单但不能理解它。

1 个答案:

答案 0 :(得分:1)

@Override方法时,您正在创建的新方法将被称为而不是之前方法

在课程Thread中,start()是一种执行某些操作并启动线程的方法。

在新课程Thread1中,start()是一种只打印一行而不执行任何操作的方法

您的理解是正确的 - 调用super.start()正在调用超类的start()版本,这允许Thread实际开始运行。

但请注意,在尝试运行两次时,您仍然会遇到该异常。这是设计Thread的方式。

从问题评论中的链接:

  

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