Java Thread 類相關的幾個核心方法
問:簡單說說 Thread 的 sleep() 和 yield() 方法的區別?
答:它們的主要區別如下:
sleep() 方法給其他執行緒執行機會時不考慮執行緒的優先順序,因此會給低優先順序的執行緒以執行的機會;而 yield() 方法只會給相同優先順序或更高優先順序的執行緒以執行的機會,甚至可能會是自己繼續得到執行機會。
執行緒執行 sleep() 方法後轉入阻塞(blocked)狀態,而執行 yield() 方法後轉入就緒(ready)狀態。
sleep() 方法宣告丟擲 InterruptedException,而 yield() 方法沒有宣告任何異常。
sleep() 方法比 yield() 方法(跟作業系統 CPU 排程相關)具有更好的可移植性。
問:簡單說說 Thread 的 join() 和 yield() 方法的區別?
答:它們的主要區別如下。
join() 方法的作用是讓 “主執行緒” 等待 “子執行緒” 結束之後才能繼續執行。
yield() 方法的作用是可以暫停當前正在執行的執行緒物件,讓其它有相同優先順序或更高的執行緒執行。它是一個靜態方法而且只保證當前執行緒放棄 CPU 佔用而不能保證使其它執行緒一定能佔用 CPU,執行 yield() 的執行緒有可能在進入到暫停狀態後馬上又被執行。
問:為什麼應該在迴圈中檢查執行緒的等待條件(如下程式碼)?
synchronized (monitor) {
// 判斷條件謂詞是否得到滿足
while(!locked) {
// 等待喚醒
monitor.wait();
}
// 處理其他的業務邏輯
}
答:我們一般都會使用如上的 while 判斷,而不採用如下的 if 判斷:
synchronized (monitor) {
// 判斷條件謂詞是否得到滿足
if(!locked) {
// 等待喚醒
monitor.wait();
}
// 處理其他的業務邏輯
}
這是因為如果採用 if 判斷,當執行緒從 wait 中喚醒時將直接執行處理其他業務邏輯的程式碼,但這時候可能出現另外一種可能,條件謂詞已經不滿足處理業務邏輯的條件了,從而出現錯誤的結果,於是有必要進行再一次判斷。
相關文章
- Java之Thread類的常用方法 .sleep()Javathread
- 關於字串分類抽取的幾個方法字串
- UIView中與AutoLayout相關的幾個方法對比UIView
- C# array類的相關方法C#
- Linux系統中與記憶體相關的幾個核心引數Linux記憶體
- 公司型別相關的幾個概念型別
- Java中陣列及相關類的使用Java陣列
- Object所有類的超類之幾個方法詳析Object
- SGA相關的幾個動態效能檢視
- 聊聊Oracle Optimizer相關的幾個引數(中)Oracle
- 聊聊Oracle Optimizer相關的幾個引數(下)Oracle
- Java Object類的各個方法JavaObject
- mysql鎖分析相關的幾個系統檢視MySql
- 動態許可權相關的幾個庫分析
- Oracle undo保留時間的幾個相關引數Oracle
- 執行緒中的幾個退出相關函式執行緒函式
- Java-關於ThreadJavathread
- 幾周內搞定Java的10個方法Java
- CSS核心的幾個概念CSS
- java多執行緒程式設計,Thread,Runnable,Future相關知識Java執行緒程式設計thread
- Linux命令列中幾個使用history相關的技巧Linux命令列
- Java_Thread類的sleep()與SystemClock類的sleep()的區別Javathread
- 關於java獲取本地ip的幾種方法Java
- java多執行緒核心api以及相關概念(一)Java執行緒API
- thread 描述執行緒的一個類thread執行緒
- Linux 核心相關命令Linux
- java併發程式設計:Thread類的使用Java程式設計thread
- java類中 多個方法求和.Java
- 時間相關的工具類
- Linux核心的framebuffer相關的核心程式碼註釋Linux
- Java多執行緒(二):Thread類Java執行緒thread
- java多執行緒之Thread類Java執行緒thread
- Java多執行緒Thread類使用Java執行緒thread
- 幾個關於星期計算的方法(C#)C#
- 幾個與文字處理相關的Linux命令總結Linux
- 幾個和MySQL InnoDB相關的引數設定說明MySql
- 關於核心執行緒(kernel_thread)(轉)執行緒thread
- ARM linux核心啟動時幾個關鍵地址Linux