我是线程新手。我有一个场景,我将数据发布到外部系统。如果由于任何错误(我将根据返回状态知道)发布失败,我必须在一定时间后再次重试。
我打算用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);
}
}
}
答案 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.
}