Easy Tutorial
❮ Thread Stop Java Hashmap Replace ❯

Java Object wait(long timeout) Method

Java Object Class


The wait(long timeout) method of the Object class puts the current thread into a waiting (blocked) state until another thread calls the notify() method or the notifyAll() method on this object, or until the timeout period specified by the timeout parameter elapses.

If the timeout parameter is set to 0, there will be no timeout, and the thread will wait indefinitely, similar to the wait() method.

The current thread must be the owner of this object's monitor, otherwise an IllegalMonitorStateException will be thrown.

If the current thread is interrupted by any other thread before or during the wait, an InterruptedException will be thrown.

If an illegal argument is passed, an IllegalArgumentException will be thrown.

Syntax

public final void wait(long timeout)

Parameters

Return Value

This method does not return a value.

Example

The following example demonstrates the use of the wait(long timeout) method:

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

public class tutorialproTest extends Object {

    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(10000); // Set the waiting time
                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 is present
            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("Removed: " + item);
                } catch (InterruptedException ix) {
                    System.out.println("Interrupted Exception!");
                } catch (Exception x) {
                    System.out.println("Exception thrown.");
                }
            }
        };

        Runnable runB = new Runnable() {

            // Run method to add elements
            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) {
        }
    }
}
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 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 in:

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

Java Object Class ```

❮ Thread Stop Java Hashmap Replace ❯