Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เกิดอะไรขึ้นถ้าเรียก run() โดยตรงแทน start() ใน Java?


การเรียก run() method ของออบเจ็กต์ Thread โดยตรง ไม่เริ่มเธรดใหม่ และจะทำงานภายในเธรดปัจจุบัน เพื่อให้ Runnable.run ทำงานในเธรดแยก ต้องทำอย่างใดอย่างหนึ่ง:

  • สร้างเธรดด้วยออบเจ็กต์ Runnable และเรียก start() บน Thread
  • สร้าง subclass ของ Thread และ override run() แล้วสร้างอินสแตนซ์และเรียก start() โดยตรง

ตัวอย่าง

public class ThreadRunMethodTest {
    public static void main(String args[]) {
        MyThread runnable = new MyThread();
        runnable.run(); // Call to run() method does not start a separate thread
        System.out.println("Main Thread");
    }
}

class MyThread extends Thread {
    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            System.out.println("Child Thread interrupted.");
        }
        System.out.println("Child Thread");
    }
}

ในตัวอย่าง เธรดหลัก ThreadRunMethodTest เรียกเธรดย่อย MyThread ด้วย run() ทำให้เธรดย่อยทำงานจนจบก่อนจึงจะทำเธรดหลักต่อ ดังนั้น "Child Thread" จะพิมพ์ก่อน "Main Thread"

ผลลัพธ์

Child Thread Main Thread