首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 線程創建兩大方式:繼承 Thread vs 實現 Runnable

     編輯:Java 相關知識

方式一:繼承 Thread 類


public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("MyThread......");
    }
    public static void main(String[] args) {
        new MyThread().start();
    }
}

方式二:實現 Runnable 接口(推薦)


public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("MyRunnable......");
    }
    public static void main(String[] args) {
        new Thread(new MyRunnable()).start();
    }
}

核心區別

維度繼承 Thread實現 Runnable
繼承限制單繼承,無法繼承其他類可實現多接口,靈活
數據共享每個線程獨立數據副本同一 Runnable 實例可共享數據
耦合度線程邏輯與線程控制耦合任務邏輯與線程控制分離
線程池適配不直接支持完美適配 ExecutorService

關鍵點:必須調用 start() 而非 run()

  • start():啟動新線程,JVM 底層調用 native start0()(JNI 技術)。
  • run():單線程順序執行,無並發效果。

賣票案例:Runnable 實現數據共享


class TicketSeller implements Runnable {
    private int tickets = 10;
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (tickets > 0) System.out.println("賣票:" + tickets--);
        }
    }
}
public static void main(String[] args) {
    TicketSeller seller = new TicketSeller();
    new Thread(seller).start();
    new Thread(seller).start();
    new Thread(seller).start(); // 總共賣 10 張,實現共享
}

Thread 本身實現了 Runnable,兩者統一於 Runnable 抽象任務接口。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved