Ian*_*ath 0 java multithreading
我有以下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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是(不断变化 - 有时我甚至看不到"结束"打印)
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)
Run Code Online (Sandbox Code Playgroud)
问题:
为什么我会IllegalMonitorStateException例外?
为什么thread.join不能按照预期的方式工作?(我看不到有时会看到"结束")
IllegalMonitorStateException在不保持监视器锁定的情况下调用需要同步的操作时,抛出此异常.wait需要在同步块中调用.
基本上你需要这样做:
synchronized(this) {
wait();
}
Run Code Online (Sandbox Code Playgroud)
这与中断机制无关.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |