您好,登錄后才能下訂單哦!
本篇內容主要講解“Java中wait()方法和notify()方法使用時的注意事項”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中wait()方法和notify()方法使用時的注意事項”吧!
wait()方法和notify()方法在使用時都有一個前提條件,必須都要獲取當前對象的鎖。也就是說如果wait()方法和notify()方法在使用時沒有獲取到鎖時,程序就會直接拋出異常。
我們看程序出線了異常。原因是我們沒有添加synchronized關鍵字,所以線程獲取不到鎖,而直接拋出的異常。
wait()方法在執行完成后,會立刻釋放對象的鎖,這時其它線程依然可以執行wait()方法所在的synchronized同步方法。而notify()方法在執行完成后不會立即釋放對象的鎖,直到這個線程的synchronized同步方法執行完時才會釋放鎖。
我們看兩個線程都暫停了,這就說明兩個線程都獲得了執行,原因就是上面分析的一樣,wait()方法在執行完會立即釋放對象的鎖,所以線程一執行完時,線程二就可以直接獲取到鎖并執行,所以輸出是異步顯示的。下面我們在看一下notify()方法的事例。
我們看線程是同步執行的。原因是notify()方法在執行后不會立刻釋放對象的鎖,所以線程一在執行notify()方法后,線程二雖然已經啟動成功,但它獲取不到當前對象的鎖,因為線程一還沒有將鎖釋放,所以線程二只能等待因為方法是synchronized同步方法,所以輸出信息是同步執行的。
wait()方法的本質是將當前線程添加到等待隊列中,它不是線程的結束,因為它還可以恢復。notify()方法的本質是將等待隊列中某一個線程使它退出等待隊列。但如果等待隊列中的線程有很多,notify()方法也只是隨機抽取一個線程讓它退出等待隊列。
我們看線程一已經被喚醒了,然后繼續執行了synchronized同步方法里的內容。
線程狀態圖
到此,相信大家對“Java中wait()方法和notify()方法使用時的注意事項”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。