java for wait()方法的异常

Avi*_*hav 5 java

public class Bees {
    public static void main(String[] args) {
        try {
            new Bees().go();
        } catch (Exception e) {
            System.out.println("thrown to main" + e);
        }
    }

    synchronized void go() throws InterruptedException {
        Thread t1 = new Thread();
        t1.start();
        System.out.print("1 ");
        t1.wait(5000);
        System.out.print("2 ");
    }
}
Run Code Online (Sandbox Code Playgroud)

本程序的输出是:

1 thrown to main
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这会thrown to main来到这里.

And*_*ter 5

您得到的是java.lang.IllegalMonitorStateException因为您调用的对象wait()(t1)不拥有同步锁.

请注意,当您将方法声明为时,该方法synchronized的锁定所有者是当前对象(Bees在这种情况下是您的实例).如果你想打电话wait()t1,你需要同步的t1:

...
    Thread t1 = new Thread();
    synchronized(t1) {
        t1.start();
        System.out.print("1 ");
        t1.wait(5000);
    }
...
Run Code Online (Sandbox Code Playgroud)

另外,在捕获异常时,应始终将异常本身包含在日志输出中,至少应该如此

...
} catch (Exception e) {
   System.out.println("thrown to main" + e);
}
...
Run Code Online (Sandbox Code Playgroud)

否则,您可能会错过重要信息(例如实际抛出了哪个异常).

另请参阅Java™教程:同步.