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
- Java中陣列及相關類的使用Java陣列
- Java-關於ThreadJavathread
- Java Object類的各個方法JavaObject
- java多執行緒程式設計,Thread,Runnable,Future相關知識Java執行緒程式設計thread
- 動態許可權相關的幾個庫分析
- Oracle undo保留時間的幾個相關引數Oracle
- mysql鎖分析相關的幾個系統檢視MySql
- 執行緒中的幾個退出相關函式執行緒函式
- Linux命令列中幾個使用history相關的技巧Linux命令列
- java併發程式設計:Thread類的使用Java程式設計thread
- Linux 核心相關命令Linux
- java多執行緒之Thread類Java執行緒thread
- Java多執行緒(二):Thread類Java執行緒thread
- Java多執行緒Thread類使用Java執行緒thread
- Thread類thread
- java多執行緒核心api以及相關概念(一)Java執行緒API
- 幾個與文字處理相關的Linux命令總結Linux
- 與數學相關的類
- 時間相關的工具類
- 查漏補缺,盤點和toggle相關的幾個APIAPI
- StringBuilder類相關操作UI
- Thread相關學習之二 - JavaThread&JVMTIThread的生命週期threadJavaJVM
- java 多執行緒(關於Thread的講解)Java執行緒thread
- 分享幾個.NET開源的AI和LLM相關專案框架AI框架
- Java類方法(定義一個工具類,儲存一些常用的方法)Java
- Java Bean相關JavaBean
- Java的方法Scanner類Java
- Thread類及使用thread
- java打包相關的步驟Java
- 零基礎學Java第四節(字串相關類)Java字串
- css幾個居中的方法CSS
- 「譯」Java Thread vs AsyncTask:該用哪個?Javathread
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 推薦幾款MySQL相關工具MySql
- java關於繼承父類,需要實現父類中的構造方法Java繼承構造方法
- Java執行緒類相關面試題與答案總結Java執行緒面試題