Java Object notifyAll() Method

Java String类Java Object Class


The Object notifyAll() method is used to wake up all threads waiting on that object.

The notifyAll() method is similar to thenotify() method,The difference is that the notifyAll() method wakes up all threads waiting on this object's monitor, while the notify() method wakes up one thread.

If the current thread is not the owner of the object's monitor, calling the notifyAll() method will also throw anIllegalMonitorStateExceptionexception.

Syntax

public final void notifyAll()

Parameters

  • None 。

Return Value

No return value.

Example

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

Example

import java.util.Collections; import java.util.LinkedList; import java.util.List; public class ExampleTest { private List synchedList; public ExampleTest() { //Create a synchronized list synchedList = Collections.synchronizedList(new LinkedList()); } //Delete 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 that the 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 ExampleTest demo = new ExampleTest(); 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 the add element 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, "Example"); 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 String类Java Object Class

Other Extensions