gpt4 book ai didi

java - Java 中 wait() 方法的异常

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:47 25 4
gpt4 key购买 nike

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 ");
}
}

这个程序的输出是:

1 thrown to main

我不明白为什么这个 thrown to main 会来到这里。

最佳答案

您收到 java.lang.IllegalMonitorStateException 因为您在 (t1) 上调用 wait() 的对象不拥有同步锁。

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

...
Thread t1 = new Thread();
synchronized(t1) {
t1.start();
System.out.print("1 ");
t1.wait(5000);
}
...

附带说明,在捕获异常时,您应该始终将异常本身包含到日志输出中,至少像

...
} catch (Exception e) {
System.out.println("thrown to main" + e);
}
...

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

另见 The Java™ Tutorials: Synchronization.

关于java - Java 中 wait() 方法的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34414708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com