1. 程式人生 > >7.2 Java執行緒模型

7.2 Java執行緒模型

一. 單執行緒的機制: 遵循主迴圈/輪詢機制. 

  1. 單執行緒控制無線迴圈
  2. 輪訊一個事件序列來決定下一步做什麼
  3. 一旦輪詢裝置返回訊號,執行事件處理程式
  4. 直到事件處理程式完成 (如果此時事件處理程式被阻止,意味著一個執行緒因為等待資源時阻塞(block,掛起執行),整個程式停止執行

Note: 事件序列:

二. 多執行緒的機制:取消主迴圈/輪詢機制.

一個執行緒可以暫停而不影響程式的其他部分。例如,當一個執行緒從網路讀取資料或等待使用者輸入時產生的空閒時間可以被利用到其他地方。 多執行緒允許迴圈中在每一幀間隙中沉睡一秒而不暫停整個系統。簡單說:在Java程式中出現執行緒阻塞,僅有一個執行緒暫停,其他執行緒繼續執行。

Note: 幀是網路通訊層中資料傳輸的最小單位。

三. 執行緒的狀態

  • 正在執行running
  • 執行的程式可以被掛起(suspend)
  • 臨時中斷
  • 掛起的程式可以被恢復Resume
  • 等待資源時候被堵塞block

四. 執行緒優先順序

執行緒的優先順序是用來決定何時從一個執行的執行緒切換到另一個。這叫“上下文轉換”(context switch)。轉換規則:

五. 同步性

因為多執行緒在你的程式中引入了一個非同步行為,所以在你需要的時候必須有加強同步性的方法.

舉例來說,如果你希望兩個執行緒相互通訊並共享一個複雜的資料結構,例如連結串列序列,你需要某些方法來確保它們沒有相互衝突。也就是說,你必須防止一個執行緒寫入資料而另一個執行緒正在讀取連結串列中的資料。這個方法稱為管程(monitor)

六. 非同步性

多執行緒促成了非同步性特徵,非同步的意思是在不同的時間點上,執行不同的任務

七. 訊息傳遞

Java的訊息傳遞系統允許一個執行緒進入一個物件的一個同步方法,然後在那裡等待,直到其他執行緒明確通知它出來

八. Thread 類和Runnable介面

Thread類封裝了執行緒的執行,為建立一個新的執行緒,你的程式必須擴充套件Thread 或實現Runnable介面

Thread類定義了好幾種方法來幫助管理執行緒。本章用到的方法如表所示:

方法

意義

getName

獲得執行緒名稱

getPriority

獲得執行緒優先順序

jsAlive

判定執行緒是否仍在執行

join

等待一個執行緒終止

run

執行緒的入口點.

sleep

在一段時間內掛起執行緒

start

通過呼叫執行方法來啟動執行緒