In this post, we will see why wait(), notify() And notifyAll() methods are in Object Class And Not in Thread Class.
This is one of the most asked java multithreading interview questions.
You might know that
notifyAll() Methods are in Object class and do you know the reason for the same?
Let’s discuss why wait(), notify() And notifyAll() Methods Are in Object Class.
In Java, thread
waits on monitor assigned to the object and when you want to send a signal to another thread who is waiting for the same monitor, you call
notify() method to
wake one thread and notifyAll() to wake up all the threads.
If wait, notify and notifyAll method are in thread class, then each thread should be aware of the status of another thread.
For example: Let’s say you have two threads, T1 and T2. Now T1 must know that T2 was waiting for this particular resource which I have just freed because T1 will need to call T2.notify().
In Java, the object itself is shared among the threads and facilitates inter-thread communication. Threads have no specific knowledge of each other. They can run asynchronously and are independent. They just run, lock, wait and get notified. They do not need to know about the status of other threads. They just need to call notify method on an object, so whomever thread is waiting on that resource will be notified.
As stated before,
- When you call
wait()method on the object, then it gives up monitor and go to sleep
- When you call
notify()method, then the single thread which is waiting for the object’s monitor will be notified.
Hence wait, notify() And notifyAll() work at object’s monitor level. If thread which is currently holding the monitor, wants to give up the monitor then it will call wait method on the object and if it want to notify other thread, then it will call notify method on the object.
Shared objects allow threads to communicate by calling
notifyAll() Methods, so these methods are in the object class.
That’s all about why wait(), notify() And notifyAll() methods Are in Object Class And Not in Thread Class.