【发布时间】:2014-07-01 09:34:39
【问题描述】:
我正在尝试使用等待和通知来暂停线程,直到调用某个方法。我目前的设置如下:
在线程上有一个方法:
public void toggleTurnOver(){
if(turnOver == false){
turnOver = true;
synchronized(this){
for(Player p: playerList){
p.notify();
}
}
}else{
turnOver = false;
}
}
此方法将唤醒位于该线程中的另一个等待:
synchronized(myGame){
if(!myGame.getTurnOver()){
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pr.println(myGame.getTurnOver());
pr.flush();
}
}
它们在同一个对象上同步,因此不确定是什么原因导致抛出该异常。有什么想法吗?
抛出的确切错误是:
Exception in thread "Thread-3" Exception in thread "Thread-2" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at Player.run(Player.java:112)
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at Game.toggleTurnOver(Game.java:764)
at Game.run(Game.java:386)
【问题讨论】:
标签: java multithreading