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来到这里.
您得到的是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™教程:同步.
| 归档时间: |
|
| 查看次数: |
1932 次 |
| 最近记录: |