-1
public class ThreadConfusion
{
    public static void main(String[] args) 
    {
        System.out.print("1 ");
        synchronized (args) 
        {
            System.out.println(" 2");
            try
            {
                args.wait();
            }
            catch (InterruptedException e)
            {
                System.out.println("exception");
            }
        }
        System.out.println("3 ");
    } //end of the main method
} // end of the class

输出

1  2

为什么输出是 1 2 而不是 1 2 3。那边到底发生了什么?

4

2 回答 2

0

因为没有人调用notify(). 您的主线程将无限期地等待。

来自的javadoc wait()

使当前线程等待,直到另一个线程为此对象调用 notify() 方法或 notifyAll() 方法。

如果你想等电话Thread.sleep()

于 2013-10-10T09:49:16.117 回答
0
args.wait();

等待()

使当前线程等待,直到另一个线程为此对象调用 notify() 方法或 notifyAll() 方法。

您是在告诉wait(锁定对象)threadmain)永远。

  try{args.wait(5000);}

并看到等待在 5 秒后完成并打印3

或致电notify()

于 2013-10-10T09:49:34.733 回答