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

ความแตกต่างระหว่าง Thread และ Runnable ใน Java

ใน Java มีสองวิธีในการสร้างเธรดการทำงานใหม่:

  1. สืบทอดจากคลาส Thread - ประกาศคลาสเป็น subclass ของ Thread และ override เมธอด run()
  2. นำอินเทอร์เฟซ Runnable ไปใช้งาน - ประกาศคลาสที่ implements Runnable และ implement เมธอด run() จากนั้นสร้างอินสแตนซ์และส่งให้ Thread constructor

ทุกเธรดมีชื่อเพื่อการระบุตัวตน อาจมีหลายเธรดที่ใช้ชื่อเดียวกันได้ หากไม่ระบุชื่อเมื่อสร้างเธรด ระบบจะสร้างชื่อใหม่ให้โดยอัตโนมัติ

ตารางเปรียบเทียบรายละเอียด

ลำดับ หัวข้อ Thread Runnable
1 พื้นฐาน Thread เป็นคลาส ใช้สร้างเธรด Runnable เป็น functional interface ใช้สร้างเธรด
2 เมธอด มีหลายเมธอด รวมถึง start() และ run() มีเพียงเมธอด abstract run() เท่านั้น
3 อ็อบเจ็กต์ แต่ละเธรดสร้างอ็อบเจ็กต์ที่ไม่ซ้ำกันและเชื่อมโยงกับมัน หลายเธรดสามารถใช้ร่วมอ็อบเจ็กต์เดียวกันได้
4 หน่วยความจำ ต้องการหน่วยความจำมากกว่า ต้องการหน่วยความจำน้อยกว่า
5 ข้อจำกัด Java ไม่รองรับ multiple inheritance ดังนั้นคลาสที่ extends Thread แล้วไม่สามารถ extends คลาสอื่นได้ ถ้าคลาส implements Runnable แล้ว ยังสามารถ extends คลาสอื่นได้

ตัวอย่าง Runnable

class RunnableExample implements Runnable {
    public void run() {
        System.out.println("Thread is running for Runnable Implementation");
    }
    
    public static void main(String args[]) {
        RunnableExample runnable = new RunnableExample();
        Thread t1 = new Thread(runnable);
        t1.start();
    }
}

ตัวอย่าง Thread

class ThreadExample extends Thread {
    public void run() {
        System.out.println("Thread is running");
    }
    
    public static void main(String args[]) {
        ThreadExample t1 = new ThreadExample();
        t1.start();
    }
}

สรุป

Runnable เป็นวิธีที่แนะนำมากกว่า (preferred) เนื่องจากยืดหยุ่นกว่า ประหยัดหน่วยความจำ และไม่ขัดขวางการสืบทอดคลาสอื่น ในขณะที่ Thread เหมาะสำหรับกรณีง่ายๆ ที่ไม่ต้องการสืบทอดเพิ่มเติม