2
A
回答
4
你得到了更多的建筑问题,首先要解决的问题。在单线程程序中,序列通常为:
- 做的东西;
- Call sendTo();
- 做更多的事情。
你有工作,如果你想要的是:
- 做的东西;
- Call sendTo();
- 如果(2)失败,请等待10秒钟并重新发送();
- 如果(3)失败,则抛出错误;
- 做更多的事情。
问题是这仍然是同步的。如果是这样你需要一个线程。您应该使用Java 5执行程序。
public void sendTo(final String username, final String message) {
if (!internalSendTo(username, message)) {
// attempt resend
ExecutorService exec = Executors.newSingleThreadExecutor();
final AtomicBoolean result = new AtomicBoolean(false);
exec.submit(new Runnable() {
boolean b = internalSendto(username, message);
result.set(b);
});
try {
exec.awaitTermination(10, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// still didn't work
} finally {
exec.shutdownNow();
}
}
}
private boolean internalSendTo(String username, String message) {
Userdata user = findUser(username);
boolean success = false;
if (user != null) {
Out out = new Out(user.getClientSocket());
// do the communication here
success = true;
}
return success;
}
现在,这只是它如何工作的粗略草图。但是,它应该让你对这个问题有所了解。
你想这还是你想:
- 做的东西;
- Call sendTo();
- 如果(2)失败,排队发送并继续;
- 做更多的事情。
基本上这是异步方法。如果你走这条路你就必须回答这样的问题:
- 发生什么情况,如果超过10秒(或某个任意的间隔)后,它仍然没有奏效?
- 哪些进程尝试sendTo()调用?
- 如果他们阻止/死亡会怎么样?
- 我需要多个发件人吗?
- 等
基本上它变得复杂得多。
0
我会推荐使用AOP和Java注释。从jcabi-aspects尝试读取制造机制:
@RetryOnFailure(attempts = 3)
public void sendTo(String username, String message) {
// try to do it
}
2
你确切的情况,使用Failsafe:
RetryPolicy retryPolicy = new RetryPolicy()
.retryWhen(null)
.withMaxRetries(2)
.withDelay(10, TimeUnit.SECONDS);
Userdata user = Failsafe.with(retryPolicy).get(() -> findUser(username));
它没有得到任何简单。告诉你的朋友:)
相关问题
- 1. ADFS在特定时间段后重新验证MVC请求
- 2. 如何在春季的特定时间后执行功能?
- 3. 如何在特定时间后运行功能
- 4. 在特定时间发送Http请求
- 5. 将中间件功能应用于特定请求
- 6. 在特定时间后重定向
- 7. 超时后重试ajax请求
- 8. 如何调用每个Ajax请求的特定功能
- 9. 如何让Web请求等待特定时间间隔?
- 10. 在特定时间执行功能
- 11. 在特定的时间执行功能
- 12. 如何在短时间内无线程锁定多个ajax请求的功能
- 13. 如何在一定的时间内阻止api重复请求
- 14. 如何在一定时间后停止处理请求的tomcat?
- 15. Firebase Cloud功能在特定时间后自动删除数据
- 16. AngularJS - 为一定时间后POST请求
- 17. 寻求与特定功能
- 18. 如何在时间到达特定时间时触发某个功能
- 19. 如何在特定时间和日期运行某个功能?
- 20. Angular:如何在post/put请求成功后获取请求?
- 21. 如何在symfony2功能测试中制作https请求?
- 22. 错误何时成为功能请求?
- 23. 如何在特定时间重试芹菜任务?
- 24. Python请求 - 重新验证后的重试请求
- 25. QT,运行特定时间的功能
- 26. 如何检查特定日期的特定时间段内是否有请求?
- 27. Laravel:如何重定向到控制器的功能和使用视图的请求::使在同一时间?
- 28. 如何使用后的“请求”功能在Firefox中 - 附加SDK
- 29. 如何在给定时间后执行某个功能?
- 30. 如何在给定时间后激活某个功能?
我只想让它工作 – lemon 2009-10-22 03:07:10
这很好,但程序不写自己。 – cletus 2009-10-22 03:09:17
是的,你说得对,我会去研究执行者。 TY – lemon 2009-10-22 03:10:10