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

Java 多線程入門:從基本概念到同步、死鎖與定時任務

     編輯:Java 綜合教學

Java 多線程入門:從基本概念到同步、死鎖與定時任務

核心概念

  • 程序:靜態代碼
  • 進程:程序的一次動態執行,擁有獨立地址空間(CPU、數據、代碼),開銷大
  • 線程:進程內的「單一連續控制流程」,又稱輕量級進程。同一進程內多線程共享堆內存,通信快、開銷小

進程與線程關係圖

兩種創建線程方式

方式優點缺點
繼承 Thread 類簡單直接單繼承限制,若已繼承 Applet 等則無法使用
實現 Runnable 接口支持多實現、邏輯與控制分離、可共享同一實例需額外 new Thread(runnable)

代碼示例:Runnable + 優先級

public class TestThread2 implements Runnable {
    private int threadId;
    public TestThread2(int id) { this.threadId = id; }

    public static void main(String[] args) {
        Thread t1 = new Thread(new TestThread2(1));
        Thread t2 = new Thread(new TestThread2(2));
        t1.setPriority(Thread.MIN_PRIORITY); // 1
        t2.setPriority(Thread.MAX_PRIORITY); // 10
        t1.start(); t2.start();
    }

    @Override public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(threadId + ":" + i);
        }
    }
}

注意:優先級只影響調度概率,不保證執行順序。

線程生命周期(五大狀態)

  1. 新生:new Thread(),調用 start() 進入就緒
  2. 就緒:具備運行條件,等待 CPU 調度
  3. 運行:獲得 CPU,執行 run();時間片用完回就緒
  4. 阻塞:sleep()、I/O 等待、鎖等待;條件消除後回就緒
  5. 死亡:run() 正常結束或異常終止(不推薦 stop()/destroy())

線程狀態轉換圖

同步與死鎖

同步機制

  • synchronized 方法:鎖住 this
  • synchronized(obj) 塊:鎖住指定對象
  • 本質:通過對象監視器實現互斥訪問共享資源

死鎖成因與恢復

四個必要條件:互斥、請求與保持、不剝佔、循環等待。恢復策略:

  1. 重啟系統(代價大)
  2. 撤銷死鎖進程、剝奪資源(可按優先級逐步撤銷)
  3. 進程回退(需棧機制,開銷極大)

任務調度:Timer / TimerTask

  • Timer:單線程調度器,類似鬧鐘
  • TimerTask:實現 Runnable 的抽象類,業務邏輯寫在 run()
  • 一個 Timer 可調度多個 TimerTask,但任務間會阻塞;需並行時建議多 Timer 實例

業務決策:何時使用多線程?

只有當程序「天然要求多個代碼塊並發執行且順序不確定」時,多線程才是合適的。若只是為了簡化邏輯或順序執行,用循環更高效。

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