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

Java 多線程核心概念圖解:進程、線程、並行、並發與 JVM 啟動線程模型

     編輯:Java 程式設計入門

一、進程:資源分配的基本單位

定義:進程是正在運行的程序實例。每個進程擁有獨立的內存空間(代碼區、堆、棧、數據區)和系統資源(文件句柄、網絡端口、鎖等)。

任務管理器視角:每一行就是一個進程(chrome.exe、java.exe、idea64.exe...)。

多進程意義

  • 實現多任務:一邊聽歌(音樂進程)、一邊寫代碼(IDE進程)、一邊編譯(編譯器進程)
  • 提高 CPU 利用率:單核 CPU 通過時間片輪轉「偽並行」,多核 CPU 真並行

二、線程:CPU 調度的基本單位

定義:線程是進程內的一條執行路徑。同一進程內的多線程共享進程的堆、方法區、文件句柄,但各自擁有獨立的程序計數器、虛擬機棧、本地方法棧。

維度進程線程
資源擁有獨立地址空間共享進程資源,僅私有棧/PC寄存器
切換開銷大(需切換地址空間、TLB刷新)小(僅切換棧幀、寄存器)
通信方式IPC(管道、Socket、共享內存)直接讀寫共享變量(需同步)
崩潰影響隔離一線程崩潰可導致整進程退出

多線程意義

  • 非為提高單任務速度(上下文切換有開銷)
  • 為提高應用吞吐率:I/O 密集型任務中,線程阻塞時 CPU 可執行其他線程
  • 搶佔式調度:執行順序具有隨機性

三、並行 vs 並發:一圖勝千言

並行vs並發示意圖
  • 並發:邏輯上「同時」發生。單核 CPU 通過時間片快速切換多線程,宏觀上看起來在同時運行。
  • 並行:物理上「同時」發生。多核 CPU 真正同一時刻執行多線程。

關係:並行是並發的一種理想實現;Java 多線程程序在單核上是並發,在多核上可達到並行。

四、Java 程序運行原理與 JVM 線程模型

啟動流程

  1. java MainClass 命令啟動 JVM 進程
  2. JVM 創建主線程(main thread)
  3. 主線程調用 public static void main(String[] args)

思考題:JVM 啟動是單線程還是多線程?

答案:多線程

原因:除主線程外,JVM 內部至少還會啟動:

  • GC 線程:垃圾回收(若不先啟動,堆內存分配極易 OOM)
  • Finalizer 線程:處理 finalize() 隊列
  • Reference Handler:處理軟/弱/虛引用
  • Signal Dispatcher:處理系統信號
  • JIT 編譯線程(C1/C2 CompilerThread)

可通過 jstack pid 或 VisualVM 觀察到 10+ 守護線程已在運行。

五、核心知識點速記卡

  • 進程 = 資源容器,線程 = 執行單元
  • 並發 ≠ 並行,單核只能並發
  • 多線程 ≠ 更快,上下文切換有代價,I/O 密集型收益大,CPU 密集型可能更慢
  • JVM 啟動即多線程,main 只是用戶代碼入口
  • 線程安全:共享可變狀態需同步(synchronized、Lock、原子類、ThreadLocal)

理解這些基石概念,是掌握 JUC 並發包、線程池、鎖優化、無鎖編程等進階主題的前提。

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