雖然有很多關於這個主題的文章和SO帖子,我仍然有一些疑問。所以請幫助我理解。說我寫:對象等待()和通知()重訪
1.Class A(){}
2.public static void main(String[] s){
3. A obj= new A();
4. synchronized(obj){
5. while(!condition)
6. obj.wait();
7. }
8.}
現在根據解釋,如果我們不使用同步塊,線程從睡眠喚醒可能會鬆動通知。但第6行釋放了對obj的鎖定,即其監視器由另一個線程擁有。 現在,當該線程調用notify()時,由於obj的監視器不屬於此線程,因此該線程如何得到通知。此外,第4行代碼只執行一次,而不是此線程的每個喚醒事件。那麼wait()之前同步的是什麼?
編輯:「第4行代碼只執行一次」錯誤的假設。在answer.Thanks
如果不使用synchronized塊,'wait'會拋出異常下手......(和'wait'只有重新獲得監視器後返回。) –