Thread 的sleep、wait、yield、interrupt
sleep:
在指定的毫秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程式精度和準確性的影響。該執行緒不丟失任何監視器的所屬權。
通過呼叫sleep使任務進入休眠狀態,在這種情況下,任務在指定的時間內不會執行。
呼叫sleep的時候鎖並沒有被釋放。
休眠
Java SE5引入了更加顯示的sleep()版本作為TimeUnit類的一部分,這個方法允許你指定sleep()延遲的時間單元,因此可以提供更好的可閱讀性。TimeUnit還可以被用來執行轉換,就想稍後你會在本書中看到的那樣。
wait:
呼叫wait使執行緒掛起,知道執行緒得到了notify或notifyAll訊息,執行緒才會進入就緒狀態。
使你可以等待某個條件發生變化,而改變這個條件超出了當前方法的控制能力。
執行緒的執行被掛起,物件上的鎖被釋放。意味著另一個任務可以獲得這個鎖。因此在改物件中的其他synchronized方法可以在wait期間被呼叫。
就意味著生命“我已經剛剛做完能做的所有事情,因此我要在這裡等待,但是我希望其他synchronized操作在條件適合的情況下才能夠執行”
yield:
如果知道已經完成了在run()方法的迴圈的一次迭代過程中所需要的工作,就可以給執行緒排程一個機制暗示:我的工作已經做的差不多了,可以讓給別的執行緒使用CPU了。通過呼叫yield()來實現。
當呼叫yield時,你也是在建議具有相同優先順序的其他執行緒可以執行。
對於任何重要的控制或在調整應用時,都不恩那個依賴於yield。實際上,yield經常被誤用。
(yield並不意味著退出和暫停,只是,告訴執行緒排程如果有人需要,可以先拿去,我過會再執行,沒人需要,我繼續執行)
呼叫yield的時候鎖並沒有被釋放。
interrupt:
中斷執行緒。
Thread.interrupt()或者新類庫裡面通過Executor的submit()來獲得Future返回值,這個Future提供cancel()以停止這個執行緒。
Thread類包含interrupt()方法,因此你可以終於被阻塞的任務,這個方法將設定執行緒的中斷狀態。如果一個執行緒已經被阻塞,或者檢視執行一個阻塞操作,那麼設定這個執行緒的終端狀態將丟擲InterruptedException。當丟擲該異常或者該任何呼叫Thread.interrupted()時,中斷狀態將復位。
你在Executor上呼叫shutdownNow(),那麼它將傳送一個interrupt()呼叫給他啟動的所有執行緒。
相關文章
- 執行緒篇2:[- sleep、wait、notify、join、yield -]執行緒AI
- java執行緒中yield(),sleep(),wait()區別詳解Java執行緒AI
- java之yield(),sleep(),wait()區別詳解-備忘筆記JavaAI筆記
- Thread的interrupt機制thread
- java yield()和sleep()的區別Java
- wait() vs sleep()AI
- 請教sleep()與yield()的區別
- Java 併發程式設計:執行緒間的協作(wait/notify/sleep/yield/join)Java程式設計執行緒AI
- 併發程式設計——執行緒中sleep(),yield(),join(),wait(),notify(),notifyAll()區別程式設計執行緒AI
- sleep & wait | notify | notifyAllAI
- 深入Thread.sleepthread
- 一張圖搞清楚wait、sleep、join、yield四者區別,面試官直接被征服!AI面試
- Thread執行緒終止interruptthread執行緒
- sleep與 wait區別AI
- sleep()和wait()區別AI
- kill_mysql_sleep_threadMySqlthread
- Java_Thread類的sleep()與SystemClock類的sleep()的區別Javathread
- java基礎:執行緒方法之interrupt和sleepJava執行緒
- 理解 Thread.Sleep 函式thread函式
- Java之Thread類的常用方法 .sleep()Javathread
- Thread interrupt() 執行緒中斷的詳細說明thread執行緒
- Linux中Sleep和Wait命令的使用方式LinuxAI
- C#中Thread.Sleep()的作用及用法C#thread
- Task.Delay 和 Thread.Sleep 的區別thread
- 【Java】sleep和wait區別總結JavaAI
- 執行緒狀態&&Wait和sleep的區別?執行緒AI
- Thread.Sleep(0)意義是什麼thread
- thread的notify和wait怎麼玩?threadAI
- 一題帶你徹底理解sleep()和wait()AI
- windows執行緒yield以及Sleep(0)和SwitchToThread之間的區別Windows執行緒thread
- Thread執行緒控制之sleep、join、setDaemon方法的用處thread執行緒
- 小議 Thread.sleep(0) 造成 CPU佔用率高的問題thread
- C# Thread.Sleep 不精準的問題以及解決方案C#thread
- 喪心病狂,竟有Thread.sleep(0)這種神仙寫法?thread
- Thead物件的sleep方法,和yield方法有何區別,為什麼實現的執行緒中,在run方法中要呼叫sleep方法?物件執行緒
- java多執行緒基礎篇(wait、notify、join、sleep、yeild方法)Java執行緒AI
- Thread的wait和notify是指的是 Runnable物件而不是 Thread物件,切記,否則喚醒失效threadAI物件
- JNI-從jvm原始碼分析Thread.interrupt的系統級別執行緒打斷原理JVM原始碼thread執行緒