Вы получили больше архитектурной проблемы решить в первую очередь. В однопоточной программе последовательность обычно:
- Сделайте вещи;
- Звонок sendTo();
- Сделайте больше вещей.
Вы должны работать, если то, что вы хотите:
- ли материал;
- Звонок sendTo();
- Если (2) терпит неудачу, подождите 10 секунд и снова sendTo();
- Если (3) не работает, выдайте ошибку;
- Сделайте больше вещей.
Суть в том, что это все еще синхронно. Если так, вам понадобится нить. Вы должны использовать Java 5 Executors.
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;
}
Теперь это всего лишь приблизительный эскиз того, как он может работать. Однако это должно дать вам некоторую признательность за эти вопросы.
вы хотите это сделать, или вы хотите:
- ли материал;
- Звонок sendTo();
- Если (2) терпит неудачу, отправьте очередь в очередь и продолжайте движение;
- Сделайте больше вещей.
В основном это асинхронный подход. Если вы пойдете так, вы должны ответить на такие вопросы, как:
- Что произойдет, если через 10+ секунд (или какой-то произвольный интервал) все еще не сработало?
- Какие процессы пытаются вызвать вызовы sendTo()?
- Что делать, если они блокируют/умирают?
- Нужно ли мне несколько отправителей?
- и т.д.
В основном это становится намного сложнее.
Я просто хочу, чтобы это сработало – lemon
Это хорошо, но программы не пишут сами. – cletus
Да, вы правы, тогда я пойду исследователями. TY – lemon