10 控制線程 執行緒讓步yield

2022-04-20 00:47:59 字數 1311 閱讀 5440

【執行緒讓步yield()方法】

yield()方法可以讓當前正在執行的執行緒暫停,但它不會阻塞該執行緒,它只是將該執行緒從執行狀態轉入就緒狀態

只是讓當前的執行緒暫停一下,讓系統的執行緒排程器重新排程一次。

很有可能,當某個執行緒呼叫了yield()方法暫停之後進入就緒狀態,它又馬上搶占了cpu的執行權,繼續執行。

【注意】

實際上,當某個執行緒呼叫了yield()方法暫停之後,只有優先順序與當前執行緒相同,或者優先順序比當前執行緒更高的處於就緒狀態的執行緒才會獲得執行的機會。

【示例**】

package com.higgin.part02;

class

yieldthread implements runnable

system.

out.println(thread.currentthread().getname()+"

====

"+i);}};

}public

class

demo03

}

【執行結果】

【注意】

在多cpu執行的情況下,效果可能會不明顯。

【小結:關於sleep和yield的區別】

1.sleep()方法暫停當前執行緒後,會給其他執行緒執行機會,執行緒優先順序對此沒有影響。

yield()方法會給優先順序相同或更高的執行緒更高的執行機會。

2.sleep()方法會將執行緒轉入阻塞狀態,直到阻塞時間結束,才會轉入就緒狀態。

yield()方法會將當前執行緒直接轉入就緒狀態。

3.sleep()方法宣告丟擲了interruptedexception異常,所以呼叫sleep()方法時要麼捕捉該異常,要麼顯示宣告丟擲該異常。

yield()方法則沒有宣告丟擲任何異常。

4.sleep()方法比yield()方法有更好的移植性,通常不建議使用yield()方法來控制併發執行緒的執行。

【設定執行緒的優先順序】

1.setpriority( int newpriority ) :設定執行緒的優先順序

2.getpriority( ):獲取執行緒的優先順序

預設情況下,main主線程預設為norm_priority普通優先順序,其值為5。

執行緒讓步 yield

執行緒讓步thread.yield 當前執行緒已經把重要的部分執行完畢,此時可以切換執行緒。class mythread implements runnable public class demo1 輸出 thread t1,5,main a 0thread t2,5,main a 0thread ...

執行緒控制(執行緒同步 執行緒安全)

一 執行緒同步 當多個控制線程共享相同的記憶體時,需要確保每個執行緒看到一致的資料。如果當某個執行緒可以去修改變數,而其他執行緒也可以去讀取或者修改這個變數的時候,就需要對這些執行緒進行同步控制,以確保它們在訪問變數的儲存內容時不會訪問到無效的數值。同步 多程序或者多執行緒訪問臨界資源時,必須進行同...

08 控制線程 後台執行緒(守護執行緒)

後台執行緒 後台執行緒 daemon thread 執行在後台,他的任務是為其它的執行緒提供服務,又稱為 守護執行緒 jvm的垃圾 執行緒就是典型的後台執行緒。特徵 如果所有的前台執行緒都死亡,後台執行緒會自動死亡。呼叫thread物件的setdaemon true 方法可以將指定的執行緒設定成後台...