【问题标题】:How to call a method until it returns true every x minutes如何调用一个方法,直到它每 x 分钟返回一次
【发布时间】:2014-03-14 06:56:54
【问题描述】:

我有一个主线程,它将从不同的类调用下面的process 方法..

现在我想做的是,如果i=1 那么,我将调用checkValue 方法,如果它返回false,那么我想睡两分钟,然后再做一个调用checkValue方法,如果它仍然返回false,那么再次睡眠两分钟,然后再次尝试checkValue方法,但现在假设如果它返回true,那么我会去i=2迭代,否则不。

public void process(String workflowName) {

    ..// some other code here

    for (int i = 1; i <= 10; i++) {
        try {
            .. // some other code here

            if (!checkValue()) {
                Thread.sleep(120000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


private boolean checkValue() throws Exception {
    boolean check_nodes = false;
    return check_nodes;
}

有什么办法吗?

只有在checkValue 方法返回 true 时,我才想使用 i=2 进行循环迭代。所以简而言之,我需要继续调用 checkValue 方法,直到它每 2 分钟返回一次 true。

一旦它返回 true,我不会为 i=1 调用 checkValue 方法,但对于 i=2,我会再次做同样的事情。

【问题讨论】:

  • 如果第三次返回true,你想睡觉吗?
  • Thread.sleep(2000);等于睡2秒,2分钟就是Thread.sleep(120000);
  • @Batty:不,我不想睡觉,如果它第三次返回真。
  • @Absurd-Mind:那是错误的......我很傻......
  • 在这种情况下使用 break。

标签: java multithreading thread-safety sleep


【解决方案1】:

Thread.sleep(millis) 挂起当前线程。

所以你必须在主线程中调用Thread.sleep(2 * 60 * 1000),才能休眠两分钟。

【讨论】:

  • 谢谢亚历克斯。是的,那是错误的。复制粘贴错误。我原来的问题呢?如果返回 false,我如何继续每隔几分钟调用一次 checkValue 方法。
  • 在我的问题中,我只是不想睡觉。我只想在 checkValue 方法返回 true 时进行 i=2 循环迭代。总之,我需要继续调用 checkValue 方法,直到它每 2 分钟返回一次。
  • 考虑阅读编程语言介绍中的“while 循环”一章。: while(!isResultReceived && i
【解决方案2】:
int i = 1;
while ( i <=10 ){
    try{
         if(!checkValue()){
             Thread.sleep(120000);
         } else{
                i++;
         }
    } catch (Exception e) {
         e.printStackTrace();
    }

}

【讨论】:

  • 这将如何工作?在这发生的事情中,睡了两分钟后,它回到i=2 的for 循环,这是我不想要的。如果它返回true,那么我只想去i=2 for 循环。
  • 我只想在 checkValue 方法返回 true 时进行 i=2 循环迭代。所以简而言之,我需要继续调用 checkValue 方法,直到它每 2 次返回 true分钟。
  • i 仍然是 1。如果 checkValue 为真,我只会增加到 2。
【解决方案3】:

如果您不想继续循环,请使用 break

for (int i = 1; i <= 10; i++) {
    try {
        .. // some other code here

        if (!checkValue()) {
            Thread.sleep(2000 * 60);
        }
        else {
            break;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 这将如何工作?在这发生的事情中,睡了两分钟后,它回到i=2 的for 循环,这是我不想要的。如果它返回true,那么我只想去i=2 for 循环。
  • 我只想在 checkValue 方法返回 true 时进行 i=2 循环迭代。所以简而言之,我需要继续调用 checkValue 方法,直到它每 2 次返回 true分钟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2019-02-01
相关资源
最近更新 更多