Java 如何在一定时间后重试函数请求
如果用户数据为空,如何使其重试发送尝试。最多2次重试,10秒后重试1次Java 如何在一定时间后重试函数请求,java,Java,如果用户数据为空,如何使其重试发送尝试。最多2次重试,10秒后重试1次 public class UserHandler { private List users = new ArrayList(); public void addUser(username) {} //adds user public Userdata findUser(username) {} //finds user public void sendTo(String username, String
public class UserHandler {
private List users = new ArrayList();
public void addUser(username) {} //adds user
public Userdata findUser(username) {} //finds user
public void sendTo(String username, String message) {
Userdata user = findUser(username);
if(user != null) {
Out out = new Out(user.getClientSocket());
out.println(message);
}
}
}
我真的必须手动插入线程并将其休眠在sendTo()中吗
编辑:服务器使用java 1.4.2首先要解决的是更多的体系结构问题。在单线程程序中,顺序通常为:
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;
}
这只是一个大概的工作原理。不过,它应该会让你对这些问题有所了解
您想要这个还是想要:
- 如果超过10秒(或任意时间间隔)后仍不工作,会发生什么情况
- 哪些进程尝试sendTo()调用
- 如果他们堵死了怎么办
- 我需要多个发件人吗
- 等
基本上,它变得更加复杂。我建议使用AOP和Java注释。从以下位置尝试读取机制:
您的确切场景,使用:
它没有变得更简单。告诉你的朋友:)这很好,但程序不会自己编写。帮你自己一个大忙,买东西读
@RetryOnFailure(attempts = 3)
public void sendTo(String username, String message) {
// try to do it
}
RetryPolicy retryPolicy = new RetryPolicy()
.retryWhen(null)
.withMaxRetries(2)
.withDelay(10, TimeUnit.SECONDS);
Userdata user = Failsafe.with(retryPolicy).get(() -> findUser(username));