了解wait()

and*_*and 0 java multithreading scjp wait

我创建了这个愚蠢的程序来玩 wait()

public class WaitTest {
    public static void main(String [] args) {

      System.out.print("1 ");
      synchronized(args){

        System.out.print("2 ");

        try {
          args.wait();
          args.notifyAll();
        }
        catch(InterruptedException e){ System.out.print("exception caught");}

        System.out.print("3 ");
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上,代码永远不会打印3,除非我写wait(100)或其他毫秒数.为什么是这样?

Fra*_* IV 7

您在notifyAll()之前执行wait().wait()将阻止.当你输入超时值时,wait()将超时,然后你的程序将继续.如果您希望程序正常工作,请创建一个线程并在那里执行notifyAll().wait()和notifyAll专为进行线程同步而设计.


kar*_*rts 6

waitnotifyAll用于多线程. args.wait()永远等待,直到其他线程调用args.notifyAll()args.notify().

当你打电话时args.wait(100),它正在等待100毫秒,超时,然后继续.

如果你熟悉信号量,那基本上就是wait/notify.


Dav*_*d M 5

你只有一个线程.wait()正在等待来自另一个线程的通知.