2012-05-12 44 views
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()的代码应该运行,直到counter等于n。不要紧,直到它被执行,就应该暂停(这可以在任何地方executeA()发生。

过了一会儿,run()再次调用,代码应该恢复在线程以前executeA()停止。

再次感谢!

+0

这听起来像是一个线程问题,这是一个正确的假设吗? –

+0

@GregFlynn,我想过线程,但是当run()方法暂停时,其他方法仍然应该能够执行。 – gieldops

+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(); 
    } 
    } 
} 
+0

条件决定何时应该暂停线程。 'run()'的另一个调用应该再次启动线程 – gieldops

+0

@gieldl您能否详细说明您的声明?不确定你所指的是“再次启动线程”,没有办法在Java中重新启动一个线程。如果你引用了恢复给定线程的执行,那么直到这个线程被通知,如第二个代码片段所示。 –

+0

再回来。是的,我的意思是恢复执行'run()'中启动的线程。 – gieldops

相关问题