文章目錄
- `cho1.`基本問題
- `cho2.`CPU資源配置設定
- `cho3.`三種線程分布
- `cho4.`守護線程&使用者線程
- `cho5.`線程的生命周期
-
-
- 線程的建立
- 線程的排程
-
- `cho6.`常用方法一覽
cho1.
基本問題
cho1.
-
什麼是程序
程式執行時的一個執行個體,系統為每個程序配置設定不同的記憶體區域。
-
什麼是線程
程序中包括一個或多個線程,線程切換的開銷小。
-
什麼是多線程
并行執行多個線程。
4.學習要點
- 多寫代碼練習,多次觀察運作結果。
- 了解時候利用畫圖,思路會比較清晰。
- 線程并發是重點(這裡我沒有細說,後面補充)
cho2.
CPU資源配置設定
cho2.

- 系統中存在多個程序,CPU為每個程序配置設定記憶體區域。
- 程序獲得的記憶體區域具有共享區域,每個線程具有各自獨立的棧區。
- 共享區域分為三段:
- 代碼段:存放代碼、常量。
- 資料段:存放全局變量、靜态變量。
- 擴充段:堆存儲。
- 線程的棧區存儲着線程内的局部變量、臨時變量。
cho3.
三種線程分布
cho3.
-
單線程程式
一個簡單那的程式,隻具有一個基本的main線程。所有的程式一定存在一個主線程。
-
基本Java程式
Java程式本身具有垃圾回收機制和異常機制。是以,基本的Java程式,具有以下三個線程:
- main:主線程。
- gc:垃圾回收線程。
- exception:異常處理線程。
-
多線程Java程式
在基本的Java程式基礎上,增加多個線程。
cho4.
守護線程&使用者線程
cho4.
- 線程分為兩類:守護線程、使用者線程。
- 守護線程為使用者線程服務,使用者線程使用setDeamon(true),可以将使用者線程設定為守護線程。
- 常見的守護線程:垃圾回收線程。
- 當JVM中隻存在守護線程,則JVM退出;守護線程會随主線程一起消亡。
cho5.
線程的生命周期
cho5.
參考連結:多線程(一):建立線程和線程的常用方法
這裡隻做簡略描述,更多細節可以去參考連結中檢視,本部分很多内容都借鑒了該連結。
線程的建立
方式一:(不推薦)
- 繼承Thread類。
- 重寫run方法。
- 建立線程對象。
- 調用start方法:啟動線程,調用run方法。
方式二:(線程無傳回值)
1)實作Runnable接口。
2) 重寫run方法。
3) 通過含參構造器建立線程對象。
4) 調用start方法
Thread implements Runnable
方式三:(線程有傳回值)
1)實作Callable接口。
2)重寫call方法。
3)使用FutureTask封裝線程對象。
4)使用Thread封裝futureTask對象。
5)調用start方法。
FutureTask implements RunnableFuture
RunnableFuture extends Runnable
線程的排程
- 線程排程政策:優先級高的線程,搶占CPU資源。
- 排程方法:
- 優先級相同,按照等待隊列先進先出。
- 優先級高,優先排程搶占政策。
- 優先級範圍1(Min)-10(Max)
- 相關方法:getPriority/setPriority
- 子類線程繼承父類線程的優先級。
cho6.
常用方法一覽
cho6.
方法名 | 說明 |
---|---|
start | 啟動一個線程,将線程加入線程隊列 |
run | 線程的主體操作内容,即線程體 |
getName | 擷取線程名稱 |
setName | 設定線程名稱 |
currentThread | 傳回目前線程執行個體 |
sleep | 線程進入休眠,保留同步鎖 |
interrupt | 打斷線程休眠,進入就緒狀态 |
wait | 線程進入等待狀态,釋放同步鎖。該方法必須寫在synchronized内。 |
notify | 喚醒休眠或者等待的線程。該方法必須寫在synchronized内。 |
join | 若在A線程執行時,調用了B線程的join,則A線程等待阻塞,直到B線程結束,A線程才會進入執行狀态。 |
yield | 讓線程進入就緒狀态,不會釋放鎖。 |
setDaemon | 将線程設定為守護線程。 |
多線程的三個案例