我有以下Java代码:
public class Lean extends Thread
{
public static void main(String args[]) throws InterruptedException
{
Lean lean = new Lean();
System.out.println("starting");
lean.start();
lean.join();
System.out.println("end");
}
public void run()
{
try
{
System.out.println("waiting");
wait(20000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
System.out.println("waiting finished");
}
}
}
输出是(不断变化 - 有时我甚至看不到“结束”打印)
starting
waiting
waiting finished
end
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at Lean.run(Lean.java:18)
问题:
为什么我会IllegalMonitorStateException
例外?
为什么thread.join不按照预期的方式工作? (我看不到有时打印“结束”)
答案 0 :(得分:6)
IllegalMonitorStateException
。需要在同步块中调用wait
。
documentation for wait
covers this。
基本上你需要这样做:
synchronized(this) {
wait();
}
这与中断机制无关。