Java Object wait(long timeout) 方法

Java Object wait(long timeout) 方法Java Object 类


Object wait(long timeout) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法notifyAll() 方法,或者超过参数 timeout 设置的超时时间。

如果 timeout 参数为 0,则不会超时,会一直进行等待,类似于 wait() 方法

当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。

如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。

如果传递的参数不合法,则会抛出 IllegalArgumentException 异常。

语法

public final void wait(long timeout)

参数

  • timeout - 等待时间(以毫秒为单位)。

返回值

没有返回值。

实例

以下实例演示了 wait(long timeout) 方法的使用:

实例

importjava.util.Collections; importjava.util.LinkedList; importjava.util.List; publicclassRunoobTestextendsObject{privateListsynchedList; publicRunoobTest(){// 创建一个同步列表synchedList = Collections.synchronizedList(newLinkedList()); }// 删除列表中的元素publicStringremoveElement()throwsInterruptedException{synchronized(synchedList){// 列表为空就等待while(synchedList.isEmpty()){System.out.println("List is empty..."); synchedList.wait(10000); // 设置等待时间System.out.println("Waiting..."); }Stringelement = (String)synchedList.remove(0); returnelement; }}// 添加元素到列表publicvoidaddElement(Stringelement){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..."); }publicstaticvoidmain(String[]args){finalRunoobTestdemo = newRunoobTest(); RunnablerunA = newRunnable(){publicvoidrun(){try{Stringitem = demo.removeElement(); System.out.println("" + item); }catch(InterruptedExceptionix){System.out.println("Interrupted Exception!"); }catch(Exceptionx){System.out.println("Exception thrown."); }}}; RunnablerunB = newRunnable(){// 执行添加元素操作,并开始循环publicvoidrun(){demo.addElement("Hello!"); }}; try{ThreadthreadA1 = newThread(runA, "Google"); threadA1.start(); Thread.sleep(500); ThreadthreadA2 = newThread(runA, "Runoob"); threadA2.start(); Thread.sleep(500); ThreadthreadB = newThread(runB, "Taobao"); threadB.start(); Thread.sleep(1000); threadA1.interrupt(); threadA2.interrupt(); }catch(InterruptedExceptionx){}}}

以上程序执行结果为:

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

Java Object wait(long timeout) 方法Java Object 类