现在,我正在准备java ocajp 8认证,只是查看一些转储,它说下面的代码抛出IllegalStateException;
并且代码在下面`
void waitForSignal() throws Exception{
Object obj = new Object();
synchronized (Thread.currentThread()) {
obj.wait();
obj.notify();
}
}`
前面的代码是它提供的所有内容,没有别的,为什么会出现异常,事实是我对多线程知之甚少。 并根据java文档
IllegalStateException:表示在非法或不适当的时间调用了某个方法。换句话说,Java环境或Java应用程序未处于所请求操作的适当状态。
所以我想在不合适的时间调用wait()或notify()...如果我是对的,为什么这是非法的时间,如果我错了,那么解释为什么会出现异常..
答案 0 :(得分:2)
除非当前线程拥有该对象的监视器,否则不能在对象上等待()。为此,您必须对其进行同步:
synchronized (obj) {
根据javadoc:
公共类IllegalMonitorStateException 扩展RuntimeException 抛出以指示线程已尝试在对象的监视器上等待或通知在对象监视器上等待的其他线程而不拥有指定的监视器。