> For the complete documentation index, see [llms.txt](https://luj.gitbook.io/code/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://luj.gitbook.io/code/appendix/multithreading/inter-thread-communication.md).

# Inter-thread Communication

**What is Polling and what are problems with it?**\
The process of testing a condition repeatedly till it becomes true is known as polling.

Polling is usually implemented with the help of loops to check whether a particular condition is true or not. If it is true, certain action is taken. This waste many CPU cycles and makes the implementation inefficient.\
For example, in a classic queuing problem where one thread is producing data and other is consuming it.

**How Java multi threading tackles this problem?**\
To avoid polling, Java uses three methods, namely,**wait(), notify() and notifyAll().**\
All these methods belong to object class as final so that all classes have them. They must be used within a synchronized block only.

* **wait() -** It tells the calling thread to give up the lock and go to sleep until some other thread enters the same monitor and calls notify().
* **notify() -** It wakes up one single thread that called wait() on the same object. It should be noted that calling notify() does not actually give up a lock on a resource.
* **notifyAll() -** It wakes up all the threads that called wait() on the same object.
