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

How to handle two thread pause in a method

情况是这样的,当app在运行时,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);
  }

这应该可以做到。