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

Java 多線程核心總結:線程生命週期、三種創建方式與狀態轉換

     編輯:Java 綜合教學

Java 多線程核心總結

轉自:https://www.cnblogs.com/lwbqqyumidi/p/3804883.html

一、線程五大基本狀態

線程生命週期

  • 新建:new MyThread()
  • 就緒:調用 start(),等待 CPU 調度
  • 運行:CPU 執行 run(),就緒是唯一入口
  • 阻塞:放棄 CPU,三類:wait()等待阻塞、synchronized同步阻塞、sleep()/join()/I/O其他阻塞
  • 死亡:run() 正常結束或異常退出

二、三種創建線程方式

  1. 繼承 Thread,重寫 run()
    class MyThread extends Thread {
        public void run() { for(int i=0;i<100;i++) System.out.println(getName()+i); }
    }
    new MyThread().start();
    
  2. 實現 Runnable,作為 Thread target
    class MyRunnable implements Runnable {
        public void run() { for(int i=0;i<100;i++) System.out.println(Thread.currentThread().getName()+i); }
    }
    new Thread(new MyRunnable()).start();
    
  3. Callable + FutureTask:call() 有返回值,FutureTask 實現 RunnableFuture 可作 target 又可獲取結果。
    Callable<Integer> c = () -> { int sum=0; for(int i=0;i<100;i++) sum+=i; return sum; };
    FutureTask<Integer> ft = new FutureTask<>(c);
    new Thread(ft).start();
    Integer result = ft.get(); // 阻塞直到完成
    

注意:同一 Thread 對象不能重複調用 start()。

三、就緒/運行/死亡轉換

  • 就緒 → 運行:獲得 CPU
  • 運行 → 就緒:主動 yield() 或失去 CPU
  • 運行 → 死亡:執行體結束或異常

yield() 後 CPU 可能再次調度同一線程。

四、優雅終止線程

推薦 volatile boolean stop 標誌位,run() 中判斷快速退出。

class MyRunnable implements Runnable {
    private volatile boolean stop = false;
    public void run() { for(int i=0;i<100 && !stop;i++) ... }
    public void stopThread() { stop = true; }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved