① wait() 與 notify/notifyAll 方法必須在同步代碼塊中使用
synchronized修飾的同步代碼塊或方法里面調用wait() 與 notify/notifyAll()方法
② wait() 與 notify/notifyAll() 區別
當執行wait()時,線程會把持有的鎖立即釋放,線程加入lock的wait set 集合中,線程處於block狀態,調用對應的notify或者notifyAll方法,線程處於runnable狀態,競爭到鎖和cpu時間就重新執行
wait(100) 線程會把持有的鎖立即釋放,線程處於block狀態,與wait()不同的是,當超過這個設置時間后,線程處於runnable狀態,重新競爭鎖和cpu時間來執行,當然也可以在線程block時,調用notify使其恢復到runnbale狀態
當執行notify/notifyAll方法時,會喚醒處於block狀態的線程,直到執行完同步塊后再釋放鎖,所以notify或者notifyAll一般寫在末尾
notify 是喚醒一個block線程,使其處於runnable狀態,競爭獲取到鎖和CPU時間后繼續執行
notify是喚醒所有的block線程,使他們處於runnable狀態,這些線程競爭獲取鎖和CPU時間后再繼續執行
轉載自: https://www.cnblogs.com/hapjin/p/5492645.html#undefined