有關執行緒排程問題

2021-08-15 07:38:34 字數 1050 閱讀 9209

有關執行緒排程問題

下列關於執行緒排程的敘述中,錯誤的是:( e )

a. 呼叫執行緒的sleep()方法,可以使比當前執行緒優先順序低的執行緒獲得執行機會

b. 呼叫執行緒的yield()方法,只會使與當前執行緒相同優先順序的執行緒獲得執行機會

c. 當有比當前執行緒優先順序高的執行緒出現時,高優先順序的執行緒將搶占cpu並執行

d. 乙個執行緒由於某些原因進入阻塞狀態,會放棄cpu

e.具有相同優先順序的多個執行緒的排程一定是分時的

f.分時排程模型是讓所有執行緒輪流獲得cpu使用權

解析:yield()暫時交出cpu控制權,從running狀態轉為runnalbe狀態,但是仍有可能被排程,sleep()執行緒指定休眠一段時間

wait()在其他執行緒呼叫此物件的notify()、notifyall()方法時才能繼續執行

執行緒中sleep()方法和yeild()方法的主要區別:

1.sleep()方法會給其他執行緒執行的機會,而不管其他執行緒的優先順序,因此會給較低優先順序的執行緒執行的機會;

yeild()方法只會給優先順序相同的或者比自己高的執行緒執行的機會

2.sleep()方法宣告丟擲interruptionexception異常,而yeild()方法沒有宣告丟擲任何異常

3.sleep()方法比yeild()方法具有更高的可移植性

4.sleep()方法使執行緒進入阻塞狀態yeild()方法使執行緒進入就緒狀態當前執行的執行緒可以呼叫另乙個執行緒的join()方法,當前執行的執行緒將轉到阻塞狀態直到另乙個執行緒執行結束,它才會恢復執行 

join()有兩種形式:public void join()和public void join(long timeout)可以設定阻塞的時間

sleep()方法進入阻塞狀態,當有兩個執行緒(執行緒1和執行緒2),執行緒1的優先順序比執行緒2的優先順序高,執行緒1sleep()則執行緒2可以獲得執行機會

當有比當前執行緒優先順序高的執行緒出現時,高優先順序會搶占cpu並執行,yield()方法,暫停一段時間,且這段時間不確定,它會使與當前執行緒相同優先順序的執行緒獲得執行機會

具有相同優先順序的多個執行緒排程不一定是分時的,多核cpu可能同時調。

有關Linux下執行緒的排程

由於linux對執行緒實現的一些特殊性,所以會給我們理解執行緒及其相關的一些函式帶來疑惑,這裡做個解答 1 關於sleep 很多書籍上都說sleep這個系統呼叫會使整個程序sleep,而不單是sleep乙個執行緒。這樣說沒錯,但我們要是在linux下寫乙個多執行緒 的程式,在乙個執行緒中呼叫slee...

區間排程問題 多執行緒

區間排程問題 單執行緒是乙個人,這裡是k個人。題目 有n項工作,k個人,每項工作分別在si開始,ti結束。對每項工作,人都可以選擇參加或不參加,但選擇了參加某項工作就必須至始至終參加全程參與,注意 x1,y1 x2,y2 y1 x2 不算重疊。求最多參加幾項工作。樣例輸入 5 2 1 45 9 2 ...

執行緒排程 執行緒池

1.每次new thread新建物件,效能查。2.執行緒缺乏統一管理,可能無限制的新建執行緒,相互競爭,有可能占用過多系統資源導致司機或oom out of memory 3.缺少更多的功能,如更多執行 定期執行 執行緒中斷。1.重用存在的執行緒,減少物件建立 消亡的開銷,效能好。2.可有效控制最大...