暂停一个方法,直到再次调用它

时间:2012-05-12 15:51:32

标签: java multithreading

我有这个方法run(),它执行了很多其他方法。在这些子方法中,有一个计数器在一些子方法中以1递增。当此计数器达到给定数字n时,方法run()应暂停一段不确定的时间。当它再次被调用时,它应该在停止之前开始执行。

这在Java中是否可行?

修改:Andersoj提出的更多信息

我试图删除我的代码很多。这是一个非常基本的例子。

public void run(int n) {
   executeA();
}

public void executeA() {
   while (randomCondition) {
      executeB();
      counter++;
   }
   executeC();
   if (counter <= 100)
      executeD();
}

executeA()中的代码应该一直运行到counter等于n。它在执行的地方无关紧要,它应该暂停(这可能发生在executeA()的任何地方。

一段时间后,再次调用run(),代码应该恢复先前在executeA()中停止的线程。

再次感谢!

1 个答案:

答案 0 :(得分:1)

如果你的停止和恢复是基于一个给定的条件,并假设该方法会被一些其他线程唤醒,这可能会使条件发生变化(在你的问题中没有明确的前提):

public void run() {
   synchronized(mutex){
      while(condition){
         try {
            mutex.wait();
         }catch(InterruptedException e) {//...}
      }
      goOn();
   }
}

或者,您可以使用mutex.wait(waitTime)等待任意时间。

当条件改变时,你的另一个线程将唤醒等待线程,或者在等待时间结束后它会再次唤醒,在这种情况下,条件将被重新评估,如果条件将被重新评估,它可能会再次进入等待状态。情况没有改变。

public void run() {
   synchronized(mutex){
     if(condition){
         mutex.notify();
     }
   }
}