我有这个方法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 :(得分: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();
}
}
}