1. 程式人生 > 實用技巧 >Java的基本使用之多執行緒

Java的基本使用之多執行緒

1、多執行緒的基本介紹

現代作業系統(Windows,macOS,Linux)都可以執行多工,多工就是同時執行多個任務。

CPU執行程式碼都是一條一條順序執行的,但是,即使是單核cpu,也可以同時執行多個任務。因為作業系統執行多工實際上就是讓CPU對多個任務輪流交替執行。作業系統輪流讓多個任務交替執行,例如,讓瀏覽器執行0.001秒,讓QQ執行0.001秒,再讓音樂播放器執行0.001秒,在人看來,CPU就是在同時執行多個任務。

1.1、程序和執行緒的概念

在計算機中,我們把一個任務稱為一個程序,瀏覽器就是一個程序,視訊播放器是另一個程序,類似的,音樂播放器和Word都是程序。某些程序內部還需要同時執行多個子任務,我們把子任務稱為執行緒

程序和執行緒的關係就是:一個程序可以包含一個或多個執行緒,但至少會有一個執行緒。作業系統排程的最小任務單位其實不是程序,而是執行緒。常用的Windows、Linux等作業系統都採用搶佔式多工,如何排程執行緒完全由作業系統決定,程式自己不能決定什麼時候執行,以及執行多長時間。

1.2、實現多工的方式(多程序、多執行緒、多程序+多執行緒)

因為同一個應用程式,既可以有多個程序,也可以有多個執行緒,因此,實現多工的方法,有以下幾種:

1)多程序模式(每個程序只有一個執行緒):

2) 多執行緒模式(一個程序有多個執行緒):

3)多程序+多執行緒模式(複雜度最高):

1.2.1、多程序和多執行緒的對比

程序和執行緒是包含關係,但是多工既可以由多程序實現,也可以由單程序內的多執行緒實現,還可以混合多程序+多執行緒。

具體採用哪種方式,要考慮到程序和執行緒的特點。

和多執行緒相比,多程序的缺點在於:

  • 建立程序比建立執行緒開銷大,尤其是在Windows系統上;
  • 程序間通訊比執行緒間通訊要慢,因為執行緒間通訊就是讀寫同一個變數,速度很快。

而多程序的優點在於:

多程序穩定性比多執行緒高,因為在多程序的情況下,一個程序崩潰不會影響其他程序,而在多執行緒的情況下,任何一個執行緒崩潰會直接導致整個程序崩潰。

1.3、Jav程式中的多執行緒

Java語言內建了多執行緒支援:一個Java程式實際上是一個JVM程序,JVM程序用一個主執行緒來執行main()

方法,在main()方法內部,我們又可以啟動多個執行緒。此外,JVM還有負責垃圾回收的其他工作執行緒等。

因此,對於大多數Java程式來說,我們說多工,實際上是說如何使用多執行緒實現多工。

和單執行緒相比,多執行緒程式設計的特點在於:多執行緒經常需要讀寫共享資料,並且需要同步。例如,播放電影時,就必須由一個執行緒播放視訊,另一個執行緒播放音訊,兩個執行緒需要協調執行,否則畫面和聲音就不同步。因此,多執行緒程式設計的複雜度高,除錯更困難。

Java多執行緒程式設計的特點又在於:

  • 多執行緒模型是Java程式最基本的併發模型;
  • 後續讀寫網路、資料庫、Web開發等都依賴Java多執行緒模型。

掌握Java多執行緒程式設計是非常必要的