Java 中 Thread.start() 和 Thread.run() 的区别。

java 8object oriented programmingprogramming更新于 2024/11/8 7:30:00

众所周知,start() 和 run() 是多线程的两个重要方法,一个用于创建新线程,另一个用于启动执行该线程。

以下是 Thread.start() 和 Thread.run() 之间的重要区别。

Sr.否。关键start()run()
1实现线程类的start方法的实现是,当它被调用时,会创建一个新的线程,并且run()方法内的代码会在该新线程中执行。而如果直接执行run方法,则不会创建新的线程,并且run()内的代码将在当前线程上执行,并且不会发生多线程。
2定义start 方法在线程类中定义,其包为 java.lang。run 是 Runnable 接口的方法,也在 java.lang 包中定义
3调用start 方法不能在同一个对象上被调用多次,否则将抛出 java.lang.IllegalThreadStateException。另一方面,run 方法如果被调用多次,则不会抛出任何类型的异常。因此,在 run 方法的情况下可以进行多次调用。
4线程数如前所述,在调用 start 方法的情况下,会与当前线程一起创建一个新线程,因此至少有两个线程,因此引入了多线程。另一方面,在直接调用 run 方法的情况下,不会创建新线程,并且任务会在同一个当前线程上执行,因此只有一个线程,因此不会引入多线程。
5调用由于线程类实现了 Runnable 接口,因此它也实现了其 run 方法,即在创建新线程后,start 方法在内部调用 run 方法。另一方面,run 方法由 start 方法执行,或者如果我们实现 Runnable 接口并调用 run 方法,则直接调用该方法。

Thread.start() 与 Thread.run() 的示例

JavaTester.java

public class JavaTester extends Thread{
   public void run(){
      System.out.println("Thread is running...");
   }
   public static void main(String args[]){
      JavaTester t1=new JavaTester();
      // 这将调用 run() 方法
      t1.start();
   }
}

输出

Thread is running...

示例

JavaTester.java

public class JavaTester implements Runnable{
   public void run(){
      System.out.println("Thread is running...");
   }
   public static void main(String args[]){
      JavaTester m1=new JavaTester();
      Thread t1 =new Thread(m1);
      // 这将调用 run() 方法
      t1.start();
   }
}

输出

Thread is running...

相关文章