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

Java 多線程程式設計基石:進程、線程、調用棧與調度模型

     編輯:Java 程式設計入門

進程 vs 線程

概念說明
進程正在運行的程式實體(如 xxx.exe),擁有獨立記憶體空間,是資源分配基本單位
線程進程內的執行流,共享進程記憶體,是 CPU 調度基本單位

單線程程式只有 main 主線程,語句串行執行。多線程讓程式能「一邊吃飯一邊看電視」——並發執行多個任務。

線程創建與層級關係

  • 程式啟動 → JVM 建立主線程執行 main
  • 主線程或其他線程可創建新線程(new Thread()、線程池等)
  • 形成樹狀層級:主線程 → 子線程 → 孫線程…

併發的本質:時間片輪轉

微觀:單核 CPU 同一時刻只能執行一條指令,OS 將 CPU 時間切成極短時間片(Linux 預設 10ms),各線程輪流搶佔執行。

宏觀:多線程「同時」運行的假象。

線程切換示意圖

調用棧:每個線程獨有的方法軌跡

單線程調用棧演示

main() 入棧
  → Add() 入棧
  → Add() 出棧,返回結果
  → println() 入棧
  → println() 出棧
main() 出棧,程式結束

調用棧模型

多線程環境:每個線程擁有獨立調用棧,互不干擾,管理各自方法調用與區域變數。

必記三大鐵律

  1. 共享堆記憶體:線程間共享堆、方法區,訪問快但需同步控制
  2. 守護線程特性:若有非守護線程存活,JVM 不退出;僅剩守護線程時 JVM 結束
  3. 搶佔式調度:JVM 採用優先級為參考的搶佔式調度,但具體執行順序由 OS + JVM 共同決定,不可依賴優先級控制業務邏輯

時間片與上下文切換

  • 時間片耗盡 → 線程讓出 CPU → 上下文切換(保存/恢復暫存器、程式計數器、棧指針)
  • 頻繁切換降低吞吐量,線程數不宜過多(通常 2×CPU 核心數為宜)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved