Easy Tutorial
❮ Java Networking Java Loop ❯

Java Object wait(long timeout, int nanos) Method

Java Object Class


The Object wait(long timeout, int nanos) method causes the current thread to wait (block) until another thread invokes the notify() or notifyAll() method for this object, or until the specified timeout and nanos period elapses.

This method is similar to the wait(long timeout) method but includes an additional nanos parameter, which represents extra time in nanoseconds (ranging from 0 to 999999). Therefore, the total timeout includes the additional nanoseconds specified by nanos.

If both timeout and nanos parameters are 0, it 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 before or while it is waiting, an InterruptedException will be thrown.

If the parameters passed are invalid or if nanos is not within the range of 0 to 999999, an IllegalArgumentException will be thrown.

Syntax

public final void wait(long timeout, int nanos)

Parameters

Return Value

This method does not return a value.

Example

The following example demonstrates the use of the wait(long timeout, int nanos) 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, wait for 10 seconds plus 500 nanoseconds
            while (synchedList.isEmpty()) {
                System.out.println("List is empty...");
                synchedList.wait(10000, 500);
                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) {
        // Example usage of the class methods
    }
}

This is a Chinese to English translation, please provide the English translation for this text. Do not provide any explanations or text apart from the translation.

Chinese: 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() {

        // 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, "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

❮ Java Networking Java Loop ❯