我摆脱了等待:
public void run() {
while(!running) {} //active waiting
//some action after running is true
}
我的代码:
class MyThread implements Runnable {
protected boolean running = false;
public Object lock = new Object();
@Override
public void run() {
while(!running) {
synchronized(lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}//end lock
}
//main job which will be done when the flag running is true
}//end run
public void managerStateChanged (Manager m) {
if(m.getState() == 1) {
this.running = true;
synchronized(lock) {
lock.notify();
}
}
}
}
class Manager {
protected MyThread listener = null;
protected int state = 0;
public int getState() { return state; }
public void registerListener(MyThread l) {
listener = l;
}
public void managerStateChanged() {
if(listener != null) {
listener.managerStateChanged(this);
}
}
}
编辑:
1)对于所有 - 使用它时要小心,wait()和notify()都必须包装在synchronized块中,否则会引发IlegalMonitorException,当你在代码中有它并且仍然再次获得此异常搜索时,可能会调用另一个没有这个同步块的地方通知。感谢评论。
2)我修改了问题,因为我的代码还可以,但是sh **发生了,我忘了在某处删除了一些东西。这工作正常。问题是我的实施正确吗?
有些观点我不太确定:
我猜对了吗?代码清楚了吗?我不想错过应该更好的待遇吗?我希望不是。感谢您的回复。