【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和sleep的區別?執行緒AI
- java執行緒中yield(),sleep(),wait()區別詳解Java執行緒AI
- java之yield(),sleep(),wait()區別詳解-備忘筆記JavaAI筆記
- 多執行緒面試題之sleep()和wait()方法有什麼區別?執行緒面試題AI
- 「每天一道面試題」sleep方法和wait方法有什麼區別?面試題AI
- Java_Thread類的sleep()與SystemClock類的sleep()的區別Javathread
- sleep & wait | notify | notifyAllAI
- InnoDB和MyISAM區別總結
- linux的sleep()和usleep()的使用和區別Linux
- 併發程式設計——執行緒中sleep(),yield(),join(),wait(),notify(),notifyAll()區別程式設計執行緒AI
- 一題帶你徹底理解sleep()和wait()AI
- Linux中Sleep和Wait命令的使用方式LinuxAI
- Linux作業系統 sleep(0)、sleep(1)和sleep(-1)的區別,他們各有什麼作用Linux作業系統
- C# suspend sleep join 區別C#
- 一張圖搞清楚wait、sleep、join、yield四者區別,面試官直接被征服!AI面試
- cookie和session的區別(全面總結)CookieSession
- js中==和===的區別以及總結JS
- 請教sleep()與yield()的區別
- 偽元素和偽類的區別總結
- Thread 的sleep、wait、yield、interruptthreadAI
- java基礎總結(面試高頻問題)十:java抽象類和介面的區別Java面試抽象
- 前端模組化,AMD和CMD的區別總結前端
- C# 中 Struct 和 Class 的區別總結C#Struct
- 總結python 元組和列表的區別Python
- wait/notify/notifyAll 總結AI
- Java異常機制關鍵字總結,及throws 和 throw 的區別Java
- java多執行緒基礎篇(wait、notify、join、sleep、yeild方法)Java執行緒AI
- post、get的區別總結
- Java中靜態跟非靜態的區別總結Java
- innerText和innerHTML的區別以及JS函式總結HTMLJS函式
- 思考與總結:扇區和磁碟塊的區別是什麼
- windows執行緒yield以及Sleep(0)和SwitchToThread之間的區別Windows執行緒thread
- library cache lock和library cache pin區別總結
- get與post的區別總結
- Java常見知識點彙總(⑫)——==和equals的區別Java
- Java容器型別使用總結Java型別