What happens to waiting thread if notify() is not called? Is this spurious wakeup?
Asked
Active
Viewed 1,648 times
7
-
You mean thread is waking up without notify? – Aniket Thakur Mar 29 '15 at 16:54
-
Yes I have called wait but didn't have coded to notify . – amitguptageek Mar 29 '15 at 16:57
-
spurious wakeups are very rare and unlikely to happen. Are you using `notifyAll()` ? – Aniket Thakur Mar 29 '15 at 17:01
-
2If you want to know what happened to a particular piece of code with `wait()` in it, you should post the code. Spurious wakeups are rare, and not likely to repeat consistently if you run the program again. So if you can reproduce this problem, it is probably not a suprious wakeup. – RealSkeptic Mar 29 '15 at 17:05
-
if you are using overloaded method of `wait()` then that Thread can wake up. other than that its rare case! – Prashant Mar 29 '15 at 17:06
1 Answers
11
If a waiting Thread is not notified by calling notify() or notifyAll() on the object the said thread is waiting on, then any one of the following may happen:
- the
Threadkeeps waiting in the object's wait pool - the
Threadbecomes runnable if a timeout was specified and the time elapses - the
Threadgets interrupted and becomes runnable again - the
Threadwakes up for no reason at all i.e. it was neither notified nor interrupted
The last case is known as a spurious wake-up and is one of the reasons why upon wake-up a Thread should always check whether the condition it was waiting for is true or not. If not, the Thread should call and go wait() again.
Ravi K Thapliyal
- 51,095
- 9
- 76
- 89