如何处理方法中的两个线程暂停



情况是这样的,当应用程序运行时,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) {}
        }
    }
}

我会为此使用原子布尔值(或整数)或易失性布尔值。

这是共享的原子/易失性布尔值:

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);
  }

这应该可以做到。

最新更新