【发布时间】:2016-10-26 23:04:38
【问题描述】:
现在,我正在准备 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() 在不适当的时间被调用......如果我是对的,为什么它是非法时间,如果我错了,那么解释为什么会出现异常......
【问题讨论】:
-
恐怕Java中的多线程不是可以通过反复试验来学习的。 (或者至少需要大量试验。)在这种情况下,问题是您没有
obj的监视器。 -
顺便说一句,在 Thread 对象上同步是一个非常糟糕的主意™..
-
@biziclop 所以,当我们锁定某个对象时,我们只能在某个对象上调用等待或通知,但这里我们锁定了某个线程对象,所以这就是非法状态异常的原因吗?有错请指正
-
没错。请参阅 Boola 的答案。
-
那个 sn-p 创建一个新的
Object obj,然后它立即调用obj.wait(),而不使该对象可用于任何其他线程。这有什么意义?
标签: java multithreading wait illegalstateexception notify