我关注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()
方法
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
上述程序抛出任何异常。任何人都可以解释我这种行为。为什么它没有启动新线程。似乎很简单但不能理解它。
答案 0 :(得分:1)
当@Override
方法时,您正在创建的新方法将被称为而不是之前方法。
在课程Thread
中,start()
是一种执行某些操作并启动线程的方法。
在新课程Thread1
中,start()
是一种只打印一行而不执行任何操作的方法
您的理解是正确的 - 调用super.start()
正在调用超类的start()
版本,这允许Thread实际开始运行。
但请注意,在尝试运行两次时,您仍然会遇到该异常。这是设计Thread
的方式。
从问题评论中的链接:
不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。