情况是这样的,当应用程序运行时,反复调用methodB()。当调用methodC()时,methodB()将暂停,直到methodC()完成。当调用methodA()时,它会暂停,直到methodB()完成三次,但跳过“Code X”。
我试图添加locker2,lock2和threadLocker2()来执行methodA()的暂停,但是它不起作用,因为methodB()也暂停。任何人都可以给我一些建议我该怎么做?
private final Object locker = new Object();
private boolean lock = false;
public void methodA() {
//Lock until methodB() run three times
//Do something
}
public void methodB() { //A thread called again and again
//Do something
threadLock();
//Code X
}
public void methodC() {
lock true;
//Do something
lock = false;
synchronized (locker) { locker.notify(); }
}
private void threadLock() {
synchronized (locker) {
while (lock) {
try {
locker.wait();
} catch (InterruptedException e) {}
}
}
}
答案 0 :(得分:0)
我会使用原子布尔(或整数)或者挥发性布尔值。
这是共享的原子/易失性布尔值:
private AtomicBoolean secondMethodIsDone = new AtomicBoolean(false);
void firstMethod() {
methodInOtherThread();
while(!secondMethodIsDone.get()) {
//thread sleep waiting...
}
// do your things when second is done
}
这发生在另一个线程中:
void methodInOtherThread() {
// do your stuff
// whenever is done:
secondMethodIsDone.set(true);
}
这应该这样做。