Java 为什么我得到非法监视器异常
我收到一个非法的监视器异常。我在谷歌上搜索了一下,但没有任何东西能说明我做错了什么 从这个normalclass中,我为另一个类创建了一个对象,并将该对象交给thread并同步线程。为什么我会得到这个例外Java 为什么我得到非法监视器异常,java,Java,我收到一个非法的监视器异常。我在谷歌上搜索了一下,但没有任何东西能说明我做错了什么 从这个normalclass中,我为另一个类创建了一个对象,并将该对象交给thread并同步线程。为什么我会得到这个例外 /* synchronize the thread object a */ /* here iam calling wait on thread as it need to complete run */ public class Normalclass { public
/* synchronize the thread object a */
/* here iam calling wait on thread as it need to complete run */
public class Normalclass
{
public static void main(String[] args)
{
NormalThread k = new NormalThread();
Thread a =new Thread(k);
a.setName("test");
a.start();
synchronized(a){
try{
a.wait();
} catch(InterruptedException e){
System.out.println("exception");
}
}
}
}
public class NormalThread implements Runnable
{
public void run()
{
for(int i=0;i<=100;i++)
{
System.out.println(i);
}
notify();
}
}
/* here iam notifying after the run for loop completed*/
// Iam getting illegal monitor exception
在您的示例中,notify在NormalThread k对象上调用,而wait在Thread a对象上调用。您应该在同一对象上调用这些方法,以便信号传播
您可以通过抓取监视器获取k来修复问题,以通过使用以下方法避免异常:
synchronized(this) {
notify();
}
但坦率地说,这个例子毫无意义。通常情况下,你试图完成的事情都是用电脑完成的。按照javadoc的方法:
等待此线程死亡
与其用谷歌搜索,你应该做的第一件事是仔细查找和阅读!异常IllegalMonitorStateException的javadocs和方法java.lang.Object::wait和java.lang.Object::notify。但是链接的问答解释了这个问题。谢谢你,卡罗尔,加入会起作用。但是在我的应用程序中,我正在调用加入,小程序挂起了
Thread a = new Thread(k);
a.start();
a.join();