Java 併發編程:線程間的協作(wait/notify/sleep/yield/join)
博文開始複習了下線程狀態,給出了線程狀態間的轉換圖示。
以實例,源碼,解釋描述方式,闡述了wait, notify ,sleep等的功能 點。非常詳細。贊一個。
java sleep(),wait(),notify()函數區別
幾句話描述了這幾者之間的相同和不同點,作爲面試題來回答,還是可以的。
wait、notify、sleep、interrupt對比分析
這篇文章裏,給出了一個圖表,對比了wait和sleep的相同和不同,很精練。
鎖機制。有介紹說Synchroniezd的鎖的機制。
結束下面這篇博文,不看源碼,也能串起整個Synchronized的流程。
包括warit(),notify()這些操作。
太喜歡這個作者了,文章分析之詳盡,太棒了。一下子解決了鎖池、等待池、對象池這些虛頭巴腦的東西。
重點在這個ObjectMonitor,醍醐灌頂!只能說自己太沒動力了,只要看了源碼,多麼的清晰明瞭,哪還會糾結這麼久!
自己學習了上面的文章後,理解的Synchronized 整個流程。亂扯了一通,歡迎各位看官指正。
自己總結:
sleep()和wait()也算是面試常問的問題了。它倆也相愛相殺多年,瞭解了用途和原理後,其實很容易理解。
會忘記主要也是用的少。做做筆記,多翻看才行。看再多,也得有自己的總結。能夠用自己組織的語音描述出來要表達的東西,纔是最好的。
- 相同點
- 都能使程序暫停
- 都可以指定時間後自動醒來,※只是醒來後的動作不一樣※。
- 都可以在synchronized內使用,※調用後產生的結果不一樣※
- 都可以通過interrupt()方法打斷線程的暫停狀態, 拋出InterruptedException
- 不同點
- 先說一點,其實兩個是完全不同的兩個東西。對比感覺就是硬比。硬撩的感覺,尬的不行。
- 就好比開車一樣,sleep是讓速不讓道,道我還佔着,別人也過不來。wait是讓速又讓道,你們快你們走,我得等等。
- 下面錯了表格來描述不同點,表格描述的很到位。
-
方法 所屬類 方法類型 鎖 解除方法 場景 用途 sleep Thread 靜態方法 不釋放鎖 timeout,interrupt 無限制 線程內的控制 wait Object 非靜態方法 釋放鎖 timeout,notify,interrupt 同步語句塊 線程間的通信