Java线程start()vs run()方法及示例
Java|线程start()与run()方法
当我们调用该start()方法时,它将导致创建新线程。然后,它会自动调用该run()方法。如果我们直接调用该run()方法,则不会创建新线程。该run()方法将仅在当前线程上执行。
这就是为什么我们能够多次调用run方法的原因,就像我们创建的任何其他方法一样。但是,该start()方法只能调用一次。
请看以下代码:
class MyThread extends Thread {
public void run()
{
System.out.println("Thread Running: " + Thread.currentThread().getName());
}
}
public class MyProg {
public static void main(String[] args)
{
MyThread t1 = new MyThread();
t1.start();
}
}输出结果
Thread Running: Thread-0
我们可以清楚地看到,run()方法是在新线程上调用的,默认线程名为Thread-0。
请看以下代码:
class MyThread extends Thread {
public void run()
{
System.out.println("Thread Running: " + Thread.currentThread().getName());
}
}
public class MyProg {
public static void main(String[] args)
{
MyThread t1 = new MyThread();
t1.run();
}
}输出结果
Thread Running: main
我们可以看到在这种情况下,我们直接调用run()方法。在当前正在运行的线程-main上调用它,并且不创建新线程。
同样,在下面的代码中,我们意识到我们只能调用一次start方法。但是,可以将run方法多次调用,因为它将被视为常规函数调用。
class MyThread extends Thread {
public void run()
{
System.out.println("Thread Running: " + Thread.currentThread().getName());
}
}
public class MyProg {
public static void main(String[] args)
{
MyThread t1 = new MyThread();
t1.run();
t1.run();
t1.start();
t1.start();
}
}输出结果
Thread Running: main Thread Running: main Thread Running: Thread-0 Exception in thread "main" java.lang.IllegalThreadStateException at java.base/java.lang.Thread.start(Thread.java:794)