การเรียก 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