天天看點

Javase複習系列——線程與并發cho1.基本問題cho2.CPU資源配置設定cho3.三種線程分布cho4.守護線程&使用者線程cho5.線程的生命周期cho6.常用方法一覽

文章目錄

  • `cho1.`基本問題
  • `cho2.`CPU資源配置設定
  • `cho3.`三種線程分布
  • `cho4.`守護線程&使用者線程
  • `cho5.`線程的生命周期
      • 線程的建立
      • 線程的排程
  • `cho6.`常用方法一覽

cho1.

基本問題

  1. 什麼是程序

    程式執行時的一個執行個體,系統為每個程序配置設定不同的記憶體區域。

  2. 什麼是線程

    程序中包括一個或多個線程,線程切換的開銷小。

  3. 什麼是多線程

    并行執行多個線程。

    4.學習要點

  • 多寫代碼練習,多次觀察運作結果。
  • 了解時候利用畫圖,思路會比較清晰。
  • 線程并發是重點(這裡我沒有細說,後面補充)

cho2.

CPU資源配置設定

Javase複習系列——線程與并發cho1.基本問題cho2.CPU資源配置設定cho3.三種線程分布cho4.守護線程&使用者線程cho5.線程的生命周期cho6.常用方法一覽
  • 系統中存在多個程序,CPU為每個程序配置設定記憶體區域。
  • 程序獲得的記憶體區域具有共享區域,每個線程具有各自獨立的棧區。
  • 共享區域分為三段:
  1. 代碼段:存放代碼、常量。
  2. 資料段:存放全局變量、靜态變量。
  3. 擴充段:堆存儲。
  • 線程的棧區存儲着線程内的局部變量、臨時變量。

cho3.

三種線程分布

Javase複習系列——線程與并發cho1.基本問題cho2.CPU資源配置設定cho3.三種線程分布cho4.守護線程&使用者線程cho5.線程的生命周期cho6.常用方法一覽
  1. 單線程程式

    一個簡單那的程式,隻具有一個基本的main線程。所有的程式一定存在一個主線程。

  2. 基本Java程式

    Java程式本身具有垃圾回收機制和異常機制。是以,基本的Java程式,具有以下三個線程:

  • main:主線程。
  • gc:垃圾回收線程。
  • exception:異常處理線程。
  1. 多線程Java程式

    在基本的Java程式基礎上,增加多個線程。

cho4.

守護線程&使用者線程

Javase複習系列——線程與并發cho1.基本問題cho2.CPU資源配置設定cho3.三種線程分布cho4.守護線程&使用者線程cho5.線程的生命周期cho6.常用方法一覽
  • 線程分為兩類:守護線程、使用者線程。
  • 守護線程為使用者線程服務,使用者線程使用setDeamon(true),可以将使用者線程設定為守護線程。
  • 常見的守護線程:垃圾回收線程。
  • 當JVM中隻存在守護線程,則JVM退出;守護線程會随主線程一起消亡。

cho5.

線程的生命周期

參考連結:多線程(一):建立線程和線程的常用方法

Javase複習系列——線程與并發cho1.基本問題cho2.CPU資源配置設定cho3.三種線程分布cho4.守護線程&使用者線程cho5.線程的生命周期cho6.常用方法一覽

這裡隻做簡略描述,更多細節可以去參考連結中檢視,本部分很多内容都借鑒了該連結。

線程的建立

方式一:(不推薦)

  1. 繼承Thread類。
  2. 重寫run方法。
  3. 建立線程對象。
  4. 調用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

線程的排程

  1. 線程排程政策:優先級高的線程,搶占CPU資源。
  2. 排程方法:
  • 優先級相同,按照等待隊列先進先出。
  • 優先級高,優先排程搶占政策。
  1. 優先級範圍1(Min)-10(Max)
  2. 相關方法:getPriority/setPriority
  3. 子類線程繼承父類線程的優先級。

cho6.

常用方法一覽

方法名 說明
start 啟動一個線程,将線程加入線程隊列
run 線程的主體操作内容,即線程體
getName 擷取線程名稱
setName 設定線程名稱
currentThread 傳回目前線程執行個體
sleep 線程進入休眠,保留同步鎖
interrupt 打斷線程休眠,進入就緒狀态
wait 線程進入等待狀态,釋放同步鎖。該方法必須寫在synchronized内。
notify 喚醒休眠或者等待的線程。該方法必須寫在synchronized内。
join 若在A線程執行時,調用了B線程的join,則A線程等待阻塞,直到B線程結束,A線程才會進入執行狀态。
yield 讓線程進入就緒狀态,不會釋放鎖。
setDaemon 将線程設定為守護線程。

多線程的三個案例