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

Java 線程基礎入門:創建、啟動、睡眠、合併、讓步完整教程

     編輯:Java 相關知識

1. 線程基本概念

  • 進程:靜態代碼載體(.class/.exe)。
  • 線程:進程內執行路徑,主線程 main()。
  • 併發本質:單 CPU 時間片輪轉,多核才真並行。

2. 創建與啟動線程的兩種方式

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

class Runner1 implements Runnable {
    public void run() {
        for (int i=0; i<10; i++) System.out.println("Runner1: " + i);
    }
}
public class TestThread1 {
    public static void main(String[] args) {
        Runner1 r1 = new Runner1();
        Thread t = new Thread(r1); // 包裝為 Thread
        t.start(); // 啟動新線程,執行 run()
        for (int i=0; i<10; i++) System.out.println("main: " + i);
    }
}

優勢:避免單繼承限制,邏輯與線程控制分離。

方式二:繼承 Thread 類

class Runner2 extends Thread {
    public void run() {
        for (int i=0; i<=10; i++) System.out.println("Runner2: " + i);
    }
}
public class TestThread2 {
    public static void main(String[] args) {
        new Runner2().start();
        for (int i=0; i<=10; i++) System.out.println("main: " + i);
    }
}

3. 線程狀態轉換與核心控制方法

sleep() - 定時休眠

Thread.sleep(1000); // 靜態方法,當前線程睡眠 1秒,不釋放鎖
// 捕獲 InterruptedException

join() - 線程合併(等待結束)

Thread t = new Thread(() -> { ... });
t.start();
t.join(); // 主線程阻塞,直到 t 結束
// 之後繼續執行主線程代碼

yield() - 讓出 CPU

if (i % 2 == 0) Thread.yield(); // 暫停當前線程,重新參與調度
// 不保證下一個獲取 CPU 是誰

4. 實戰代碼輸出分析

  • sleep:主線程睡 10 秒,子線程每秒打印時間。
  • join:子線程跑完 5 秒,主線程才繼續打印。
  • yield:兩子線程交替輸出,但非強制輪換。

5. 關鍵區別總結

方法釋放鎖用途拋異常
sleep否延時InterruptedException
wait是條件等待InterruptedException
join否等待線程結束InterruptedException
yield否禮讓 CPU無

總結

掌握兩種創建方式、三大控制方法(sleep/join/yield)及其語義差異,是 Java 多線程編程的必修基礎。

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