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

Java 多線程創建全攻略:Thread 繼承與 Runnable 實現深度解析

     編輯:Java 綜合教學

線程與進程:核心區別

理解多線程前,必須區分進程與線程:

  • 進程:正在執行的程序,擁有獨立的記憶體空間。宏觀上作業系統並行運行多進程,微觀上 CPU 分時片快速切換。
  • 線程:進程內的執行路徑,負責代碼執行。一個進程可包含多線程,共享進程記憶體,實現並發任務。

JVM 啟動時自動創建 main 線程執行 main() 方法,同時還有垃圾回收線程,故 Java 程序至少包含兩個線程。

多線程優缺點權衡

優點缺點
解決單程序多任務執行增加 CPU 上下文切換開銷
提高資源利用率(非單純提速)易引發線程安全問題(共享數據競態)
可能出現死鎖

兩種核心創建方式

方式一:繼承 Thread 類

class MyThread extends Thread {
    @Override
    public void run() {
        // 線程任務代碼
    }
}
// 使用
new MyThread().start();

缺點:Java 單繼承限制,若已繼承其他類則無法使用。

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

class MyTask implements Runnable {
    @Override
    public void run() {
        // 線程任務代碼
    }
}
// 使用
new Thread(new MyTask()).start();

核心原理:Thread 內部持有 Runnable target 變量,其 run() 方法會調用 target.run()。實現類對象不是線程對象,必須包裝在 Thread 中才能啟動。

關鍵點:絕不可直接調用 run(),否則僅作普通方法執行,不會開啟新線程;必須調用 start()。

常用線程方法速查

方法說明
Thread(String name)構造函數,指定線程名稱
getName()/setName()獲取/設置線程名稱
sleep(long ms)靜態方法,讓當前執行線程休眠指定毫秒,需捕獲 InterruptedException
currentThread()靜態方法,返回當前正在執行代碼的線程對象
getPriority()/setPriority(int)獲取/設置優先級(1-10,默認 5),具體調度取決於 OS

為什麼 sleep() 不能拋出異常只能捕獲?

Thread.run() 未聲明拋出異常,子類覆寫時根據「異常兼容性規則」只能拋出同級或子類異常,故 InterruptedException(受檢異常)只能內部捕獲處理。

總結

掌握 Runnable + Thread 組合模式是 Java 多線程開發的基石,配合 start() 啟動、sleep() 讓步、優先級設置等 API,能構建高效並發程序。後續將深入講解線程同步、鎖機制、線程池等進階主題。

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