【Java】sleep和wait區別總結
來源:https://blog.csdn.net/zlfprogram/article/details/77257373
一、來源類:
- sleep是Thread類的靜態方法;
- wait是Object的方法,可以對任意一個物件呼叫wait方法
二、使用範圍:
- sleep可以在任何地方使用,必須捕獲異常;
- wait只能在同步控制方法或者同步控制塊裡面使用,不需要捕獲異常
三、鎖:
- sleep不釋放鎖,不出讓鎖資源,但會讓出CPU資源;
- wait釋放了鎖,進入執行緒等待池等待,出讓系統資源(鎖資源和CPU資源)
執行緒的資源有不少,但應該包含CPU資源和鎖資源這兩類。
(1)sleep(long mills):讓出CPU資源,但是不會釋放鎖資源。
(2)wait():讓出CPU資源和鎖資源。
鎖是用來執行緒同步的,sleep(long mills)雖然讓出了CPU,但是不會讓出鎖,其他執行緒可以利用CPU時間片了,但如果其他執行緒要獲取sleep(long mills)擁有的鎖才能執行,則會因為無法獲取鎖而不能執行,繼續等待。
但是那些沒有和sleep(long mills)競爭鎖的執行緒,一旦得到CPU時間片即可執行了。
四、喚醒:
- sleep(ms) 將一個執行緒睡眠並指定時間自動醒,如果時間不到可以呼叫interreput()來強行打斷;
- wait() 將一個執行緒掛起,直到超時或者該執行緒被喚醒。
五、施加者是有本質區別
- 兩者都可以讓執行緒暫停一段時間,但是本質的區別是一個執行緒的執行狀態控制,一個是執行緒之間的通訊的問題
- sleep()是讓某個執行緒暫停執行一段時間,其控制範圍是由當前執行緒決定,也就是說,線上程裡面決定.好比說,我要做的事情是 “點火->燒水->煮麵”,而當我點完火之後我不立即燒水,我要休息一段時間再燒.對於執行的主動權是由我的流程來控制.
- 而wait(),首先這是由某個確定的物件來呼叫的,將這個物件理解成一個傳話的人,當這個人在某個執行緒裡面說”暫停!”,也是 thisOBJ.wait(),這裡的暫停是阻塞,還是”點火->燒水->煮飯”,thisOBJ就好比一個監督我的人站在我旁邊,本來該執行緒應該執行1後執行2,再執行3,而在2處被那個物件喊暫停,那麼我就會一直等在這裡而不執行3,但正個流程並沒有結束,我一直想去煮飯,但還沒被允許, 直到那個物件在某個地方說”通知暫停的執行緒啟動!”,也就是thisOBJ.notify()的時候,那麼我就可以煮飯了,這個被暫停的執行緒就會從暫停處繼續執行.
相關文章
- sleep()和wait()區別AI
- java yield()和sleep()的區別Java
- wait() vs sleep()AI
- 多執行緒面試題之sleep()和wait()方法有什麼區別?執行緒面試題AI
- 「每天一道面試題」sleep方法和wait方法有什麼區別?面試題AI
- Linux中Sleep和Wait命令的使用方式LinuxAI
- 併發程式設計——執行緒中sleep(),yield(),join(),wait(),notify(),notifyAll()區別程式設計執行緒AI
- 一題帶你徹底理解sleep()和wait()AI
- Task.Delay 和 Thread.Sleep 的區別thread
- socket close和shutdown的區別,TIME_WAIT和CLOSE_WAIT,SO_REUSEADDRAI
- 一張圖搞清楚wait、sleep、join、yield四者區別,面試官直接被征服!AI面試
- cookie和session的區別(全面總結)CookieSession
- js中==和===的區別以及總結JS
- java多執行緒基礎篇(wait、notify、join、sleep、yeild方法)Java執行緒AI
- 偽元素和偽類的區別總結
- C# 中 Struct 和 Class 的區別總結C#Struct
- 執行緒篇2:[- sleep、wait、notify、join、yield -]執行緒AI
- java基礎總結(面試高頻問題)十:java抽象類和介面的區別Java面試抽象
- wait()方法與await()方法的區別AI
- 【Mysql】MySQL中interactive_timeout和wait_timeout的區別MySqlAI
- Java中靜態跟非靜態的區別總結Java
- 前端模組化,AMD和CMD的區別總結前端
- post、get的區別總結
- Java常見知識點彙總(⑫)——==和equals的區別Java
- get與post的區別總結
- java中==和equlas區別Java
- java:Date和DateTime區別Java
- 【Java】equals 和 == 的區別Java
- java 中equals和==的區別Java
- JAVA 中interface 和 abstract 區別Java
- java中size()和length區別Java
- Java-併發-wait()、notify()和notifyAll()JavaAI
- Java 中的 Wait 和 Notify 機制JavaAI
- 12C關於CDB、PDB引數的區別和總結
- 面試題總結:Queue 中 poll()和 remove()有什麼區別?面試題REM
- http和https有何區別?恆訊科技總結這11點HTTP
- “軟連結”和“硬連結”的區別
- 硬連結和軟連結的區別