JAVA中Wait()與Notity()、同步隊列與等待隊列


1.Wait()與Notity()方法
 wait(): 持有鎖的線程調用wait()方法后,會一直阻塞,直到有別的線程調用notify()將其喚醒

notify(): 只能通知一個等待線程,喚醒任意一個處於wait線程

notifyall():將等待隊列中的所有線程喚醒,並加入同步隊列

同步(線程間的通信)

  object:wait()與notify()必須搭配synchronized使用,使用wait與notify有一個前提,必須在同步方法或同步代碼快中使用,必   須拿到相應對象的鎖才能調用,否則拋出illegalMonitorStateException

2.同步隊列與等待隊列
 任意一個object以及其子類對象都有兩個隊列

 同步隊列:所有嘗試獲取該對象Monitor失敗的線程,都加入同步隊列排隊獲取鎖

 等待隊列:已經拿到鎖的線程在等待其他資源時,主動釋放鎖,置入該對象等待隊列中,等待被喚醒,當調用notify()會在等待                      隊列中任意喚醒一個線程,將其置入同步隊列的尾部,排隊獲取鎖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM