YouTip LogoYouTip

Java Object Wait Timeout Nanos

[![Image 1: Java String Class](#)Java Object Class](#) * * * The `Object wait(long timeout, int nanos)` method causes the current thread to wait (block) until another thread calls the `notify()` method or the `notifyAll()` method for this object, or until the timeout specified by the `timeout` and `nanos` parameters has elapsed. This method is similar to the [wait(long timeout) method](#), but with an additional `nanos` parameter. This parameter represents extra time in nanoseconds (range 0-999999). Therefore, the total timeout duration is the `timeout` milliseconds plus the `nanos` nanoseconds. If both the `timeout` and `nanos` parameters are 0, 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 thread before or while waiting, an `InterruptedException` will be thrown. If the passed parameters are invalid or `nanos` is not within the range 0-999999, an `IllegalArgumentException` will be thrown. ### Syntax public final void wait(long timeout, int nanos) ### Parameters * **timeout** - The maximum time to wait (in milliseconds). * **nanos** - Additional time, in nanoseconds. ### Return Value This method does not return a value. ### Example The following example demonstrates the usage of the `wait(long timeout, int nanos)` method: ## Example import java.util.Collections; import java.util.LinkedList; import java.util.List; public class TutorialTest extends Object{private List synchedList; public TutorialTest(){synchedList = Collections.synchronizedList(new LinkedList()); }public String removeElement()throws InterruptedException{synchronized(synchedList){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; }}public void addElement(String element){System.out.println("Opening..."); synchronized(synchedList){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(){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](#)
← Java8 StreamsJava Object Wait β†’