Computer >> Máy Tính >  >> Lập trình >> Java

Khi nào gọi Thread.run () thay vì Thread.start () trong Java?


Khi chúng tôi gọi start () trên một chuỗi, nó làm cho chuỗi đó bắt đầu thực thi và run () phương thức của một luồng được gọi bởi Máy ảo Java (JVM) . Nếu chúng tôi gọi trực tiếp là run () , nó sẽ được coi là một bình thường phương pháp được ghi đè của một lớp luồng (hoặc giao diện chạy được) và nó sẽ được thực thi trong ngữ cảnh của luồng hiện tại, không phải trong một luồng mới.

Ví dụ

public class CallRunMethodTest extends Thread {
   @Override
   public void run() {
      System.out.println("In the run() method: " + Thread.currentThread().getName());
      for(int i = 0; i < 5 ; i++) {
         System.out.println("i: " + i);
         try {
            Thread.sleep(300);
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
  }
   public static void main(String[] args) {
      CallRunMethodTest t1 = new CallRunMethodTest();
      CallRunMethodTest t2 = new CallRunMethodTest();
      t1.run(); // calling run() method directly instead of start() method
      t2.run(); // calling run() method directly instead of start() method
   }
}

Trong ví dụ trên, hai luồng được tạo và phương thức run () được gọi trực tiếp trên các luồng thay vì gọi phương thức start ().

Đầu ra

In the run() method: main
i: 0
i: 1
i: 2
i: 3
i: 4
In the run() method: main
i: 0
i: 1
i: 2
i: 3
i: 4