如何在方法

时间:2017-02-03 17:16:54

标签: java java-threads

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

1 个答案:

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

这应该这样做。