1

我有这个方法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()应该运行到counterequals n。直到它在哪里执行才重要,它应该暂停(这可能发生在executeA().

过了一会儿,run()再次调用,代码应该从线程先前停止的地方恢复executeA()

再次感谢!

4

1 回答 1

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();
     }
   }
}
于 2012-05-12T16:02:10.793 回答