Java Object Notify
# Java Object notify() Method
[Java Object Class](#)
* * *
The Object notify() method is used to wake up a single thread that is waiting on this object's monitor.
If all threads are waiting on this object's monitor, then only one thread is chosen. The choice is arbitrary and occurs at the discretion of the implementation.
A thread can call the wait() method to wait on an object's monitor.
The notify() method can only be called by a thread that is the owner of this object's monitor.
A thread becomes the owner of an object's monitor in one of three ways:
* By executing a synchronized instance method of that object.
* By executing the body of a synchronized statement that synchronizes on the monitor.
* For objects of type Class, by executing a synchronized static method of that class.
Only one thread at a time can own an object's monitor.
If the current thread is not the owner of this object's monitor, an IllegalMonitorStateException is thrown.
### Syntax
public final void notify()
### Parameters
* **None**.
### Return Value
No return value.
### Example
The following example demonstrates the use of the notify() method:
## Example
import java.util.Collections; import java.util.LinkedList; import java.util.List; public class TutorialTest{private List synchedList; public TutorialTest(){// Create a synchronized list synchedList = Collections.synchronizedList(new LinkedList()); }// Remove an element from the list public String removeElement()throws InterruptedException{synchronized(synchedList){// Wait while the list is empty while(synchedList.isEmpty()){System.out.println("List is empty..."); synchedList.wait(); System.out.println("Waiting..."); }String element = (String)synchedList.remove(0); return element; }}// Add an element to the list public void addElement(String element){System.out.println("Opening..."); synchronized(synchedList){// Add an element and notify that an element exists synchedList.add(element); System.out.println("New Element:'" + element + "'"); synchedList.notifyAll(); System.out.println("notifyAll called!"); }System.out.println("Closing..."); }public static void main(String[]args){final TutorialTest demo = new TutorialTest(); Runnable runA = new Runnable(){public void run(){try{String item = demo.removeElement(); System.out.println("" + item); }catch(InterruptedException ix){System.out.println("Interrupted Exception!"); }catch(Exception x){System.out.println("Exception thrown."); }}}; Runnable runB = new Runnable(){// Perform add element operation and start loop public void run(){demo.addElement("Hello!"); }}; try{Thread threadA1 = new Thread(runA, "Google"); threadA1.start(); Thread.sleep(500); Thread threadA2 = new Thread(runA, ""); threadA2.start(); Thread.sleep(500); Thread threadB = new Thread(runB, "Taobao"); threadB.start(); Thread.sleep(1000); threadA1.interrupt(); threadA2.interrupt(); }catch(InterruptedException x){}}}
The output of the above program is:
List is empty...List is empty...Opening...New Element:'Hello!' notifyAll called!Closing...Waiting...Waiting...List is empty...Hello!Interrupted Exception!
* * Java Object Class](#)
YouTip