Easy Tutorial
❮ Number Floor Dir Empty ❯

Java Object notify() Method

Java Object Class


The notify() method of the Object class is used to wake up a single thread that is waiting on this object's monitor.

If multiple threads are waiting on this object, one of them is chosen arbitrarily to be awakened, the choice being made at the discretion of the implementation.

A thread can be waiting on an object's monitor by calling the wait() method.

The notify() method can only be called by a thread that owns the object's monitor.

A thread can become the owner of an object's monitor by:

Only one thread at a time can own an object's monitor.

If the current thread is not the owner of the object's monitor, an IllegalMonitorStateException is thrown.

Syntax

public final void notify()

Parameters

Return Value

This method does not return a value.

Example

The following example demonstrates the use of the notify() method:

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class tutorialproTest {

    private List synchedList;

    public tutorialproTest() {
        // Create a synchronized list
        synchedList = Collections.synchronizedList(new LinkedList());
    }

    // Remove an element from the list
    public String removeElement() throws InterruptedException {
        synchronized (synchedList) {
            // Wait if 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 all waiting threads
            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 tutorialproTest demo = new tutorialproTest();

        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() {
            public void run() {
                demo.addElement("Hello!");
            }
        };

        try {
            Thread threadA1 = new Thread(runA, "A");
            threadA1.start();

            Thread.sleep(500);

            Thread threadA2 = new Thread(runA, "B");
            threadA2.start();

            Thread.sleep(500);

            Thread threadB = new Thread(runB, "C");
            threadB.start();

            Thread.sleep(1000);

            threadA1.interrupt();
            threadA2.interrupt();
        } catch (InterruptedException x) {
        }
    }
}
System.out.println("Interrupted Exception!");
} catch (Exception x) {
    System.out.println("Exception thrown.");
}
}
};

Runnable runB = new Runnable() {

// Perform element addition operation and start the loop
public void run() {
    demo.addElement("Hello!");
}
};

try {
    Thread threadA1 = new Thread(runA, "Google");
    threadA1.start();

    Thread.sleep(500);

    Thread threadA2 = new Thread(runA, "tutorialpro");
    threadA2.start();

    Thread.sleep(500);

    Thread threadB = new Thread(runB, "Taobao");
    threadB.start();

    Thread.sleep(1000);

    threadA1.interrupt();
    threadA2.interrupt();
} catch (InterruptedException x) {
}
}
}

The above program execution results are:

List is empty...
List is empty...
Opening...
New Element:'Hello!'
notifyAll called!
Closing...
Waiting...
Waiting...
List is empty...
Hello!
Interrupted Exception!

Java Object Class ```

❮ Number Floor Dir Empty ❯