複製鏈接
請複製以下鏈接發送給好友

線程調度

鎖定
計算機通常只有一個CPU,在任意時刻只能執行一條機器指令,每個線程只有獲得CPU的使用權才能執行指令。所謂多線程的併發運行,其實是指從宏觀上看,各個線程輪流獲得CPU的使用權,分別執行各自的任務。在運行池中,會有多個處於就緒狀態的線程在等待CPU,JAVA虛擬機的一項任務就是負責線程的調度,線程調度是指按照特定機制為多個線程分配CPU的使用權。
中文名
線程調度
順便幫
計算機
程    序
JAVA虛擬機
調度模型
分時調度模型和搶佔式調度模型

目錄

線程調度簡介

有兩種調度模型:分時調度模型和搶佔式調度模型。
分時調度模型是指讓所有的線程輪流獲得cpu的使用權,並且平均分配每個線程佔用的CPU的時間片這個也比較好理解。
java虛擬機採用搶佔式調度模型,是指優先讓可運行池中優先級高的線程佔用CPU,如果可運行池中的線程優先級相同,那麼就隨機選擇一個線程,使其佔用CPU。處於運行狀態的線程會一直運行,直至它不得不放棄CPU。

線程調度放棄CPU原因

一個線程會因為以下原因而放棄CPU。
1 java虛擬機讓當前線程暫時放棄CPU,轉到就緒狀態,使其它線程獲得運行機會。
2 當前線程因為某些原因而進入阻塞狀態
3 線程結束運行
需要注意的是,線程的調度不是跨平台的,它 不僅僅取決於java虛擬機,還依賴於操作系統。在某些操作系統中,只要運行中的線程沒有遇到阻塞,就不會放棄CPU;在某些操作系統中,即使線程沒有遇到阻塞,也會運行一段時間後放棄CPU,給其它線程運行的機會。
java的線程調度是不分時的,同時啓動多個線程後,不能保證各個線程輪流獲得均等的CPU時間片。
如果希望明確地讓一個線程給另外一個線程運行的機會,可以採取以下辦法之一。
調整各個線程的優先級
讓處於運行狀態的線程調用Thread.sleep方法
讓處於運行狀態的線程調用Thread.yield方法
讓處於運行狀態的線程調用另一個線程的join方法
線程切換:不是所有的線程切換都需要進入內核模式