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

เรียก run() โดยตรงแทน start() ใน Java Thread ได้หรือไม่?

คำตอบ: เรียกได้ แต่ ไม่ใช่ multithreading

run() เป็นเพียง method ธรรมดา เรียกแล้วรันใน thread เดิม (current thread) ไม่สร้าง thread ใหม่

ตัวอย่าง

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread ID: " + Thread.currentThread().getId() + " running");
    }
}

public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 6; i++) {
            MyThread t = new MyThread();
            t.run(); // เรียกโดยตรง - รันใน main thread
        }
    }
}

ผลลัพธ์

Thread ID: 1 running
Thread ID: 1 running
Thread ID: 1 running
Thread ID: 1 running
Thread ID: 1 running

Thread ID เหมือนกันทั้งหมด (main thread = 1) รัน sequential ไม่ใช่ parallel

เปรียบเทียบ

เมธอดสร้าง Thread ใหม่รันแบบใช้เมื่อไหร่
start()ใช่Asynchronous (parallel)ปกติ - ต้องการ multithreading
run()ไม่Synchronous (sequential)Testing, หรือรัน logic โดยไม่ต้องการ thread ใหม่

สรุป

  • ต้องการ multithreading จริง → ใช้ start() เสมอ
  • เรียก run() โดยตรงได้ แต่เป็น single-threaded execution
  • เรียก start() ซ้ำบน thread เดียว → IllegalThreadStateException