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: mainThread Running: main
Thread Running: Thread-0
Exception in thread "main" java.lang.IllegalThreadStateException
at java.base/java.lang.Thread.start(Thread.java:794)
以上是 Java线程start()vs run()方法及示例 的全部内容, 来源链接: utcz.com/z/340765.html