在某些暂停后重新运行java代码

时间:2014-12-23 02:46:11

标签: java multithreading

我是线程新手。我有一个场景,我将数据发布到外部系统。如果由于任何错误(我将根据返回状态知道)发布失败,我必须在一定时间后再次重试。

我打算用Thread.sleep来实现这个目标。使用它还是有更好的方法吗?

任何帮助都将受到高度赞赏。

伪代码: -

public void publish()  throws InterruptedException {
int status=1;

for ( int i=0;i<3 i++)
 {
   status= //java code to publish external system;

      if( status ==0 ) //0 means success
        {
         break;
        }
      else
      {
      Thread.sleep(4000);
       }
  }
}

1 个答案:

答案 0 :(得分:1)

首先,你的例子仍然是单线程的(当你睡觉时,该线程将被暂停(),你似乎知道)。但是,作为所描述问题的解决方案,使用Thread.sleep()和不断增长的backoffInterval的重试循环听起来像是一种合理的方法

long backoffInterval = 1000; // <-- 1000 milliseconds
while (true) {
    if (sendMessage()) { // <-- did the message send complete?
        break; // <-- stop if it did.
    }
    try {
        Thread.sleep(backoffInterval); // <-- sleep
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    backoffInterval += 1000; // <-- increase the backoffInterval.
}