У меня есть фильтр сервлетов, который несет некоторую логику и производит вывод, прежде чем запрос будет обслуживаться основной страницей. У меня возникла новая необходимость отправки вывода на несколько секунд позже, чем в момент ее создания (с задержкой ~ 10 с). Из-за некоторых неудачных вариантов дизайна, сделанных ранее, я не могу переместить положение фильтра только для того, чтобы отправить результат.Java thread start() без join() или interrupt() в сервлет
Я выбрал, чтобы создать поток и задержать передачу сообщения там. В настоящее время я не предпринимаю никаких явных шагов, чтобы остановить выполнение этого потока. Я не уверен, что все правильно очищается. Должен ли я использовать функции join() или interrupt() или любые другие методы Thread для безопасной очистки после этого?
Таким образом, внутри основного кода сервлета У меня есть что-то вроде этого ...
Thread t = new Thread(new MessageSender(message, 10000));
t.start();
//Carry on.. la la la
Хотя существуют и другие поля в этом классе, я просто раздели много несущественные вещи, как установление связей БД и т. д., чтобы сделать точку понятной.
private static class MessageSender implements Runnable {
String message;
int delay;
public MessageSender(String message, int delay) {
this.message = message;
this.delay = delay;
}
public void run() {
try {
Thread.sleep(delay);
System.out.println(new java.util.Date() + ": hello world");
} catch (InterruptedException e) {
// Do blah
} catch (Exception e) {
// Do blah blah
} finally {
// Close connections and stuff
}
}
}