1.Wait()與Notity()方法
wait(): 持有鎖的線程調用wait()方法后,會一直阻塞,直到有別的線程調用notify()將其喚醒
notify(): 只能通知一個等待線程,喚醒任意一個處於wait線程
notifyall():將等待隊列中的所有線程喚醒,並加入同步隊列
同步(線程間的通信)
object:wait()與notify()必須搭配synchronized使用,使用wait與notify有一個前提,必須在同步方法或同步代碼快中使用,必 須拿到相應對象的鎖才能調用,否則拋出illegalMonitorStateException
2.同步隊列與等待隊列
任意一個object以及其子類對象都有兩個隊列
同步隊列:所有嘗試獲取該對象Monitor失敗的線程,都加入同步隊列排隊獲取鎖
等待隊列:已經拿到鎖的線程在等待其他資源時,主動釋放鎖,置入該對象等待隊列中,等待被喚醒,當調用notify()會在等待 隊列中任意喚醒一個線程,將其置入同步隊列的尾部,排隊獲取鎖