Estoy escribiendo una aplicación donde el usuario puede agregar y eliminar a otros usuarios como amigos. Mi página tiene una lista de usuarios diferentes y cada usuario recibe un botón para agregarlos a la lista de amigos. Estoy enviando una solicitud de AJAX al servlet de Java para agregar al usuario seleccionado como amigo. Estoy mostrando un mensaje de alerta en la interfaz de usuario para mostrar el resultado del proceso.Ejecutar el proceso de fondo en diferentes hilos en Java
Mi problema es que tengo que enviar un correo electrónico cuando el usuario se agrega como amigo este código está escrito en el mismo método en el servlet.
Debido a este fragmento de código, mi mensaje de alerta llega muy tarde.
Necesito ejecutar un pthread por separado para ejecutar esta función de envío de correo para que una vez que se agregue el usuario obtenga el resultado y el correo se envíe en un proceso por separado.
Mi código en el servlet es
private void sendMail(long inviteeID) {
User inviteeUser = null;
try {
inviteeUser = userHandler.getUser(inviteeID);
} catch (DataException e) {
sLog.error("User does not exist.", e);
} catch (UserNotFoundException e) {
sLog.error("User does not exist.", e);
}
MailUtility.send(inviteeUser.getUserEmailAddress().trim(),
"[email protected]", "add friend message", Utility
.getAddFriendMessageBody(LoginHelper
.getLoggedInUserEmail()), false);
}
private String inviteAsFriend(long inviteeID) {
boolean result = false;
if (LoginHelper.isUserLoggedIn()) {
try {
User user = userHandler.findUserByEmail(LoginHelper
.getLoggedInUserEmail());
if (userHandler.isUserFriend(user.getUserId(), inviteeID)) {
if (userHandler.addFriend(user, inviteeID)) {
result = true;
return "Member added successfully as your friend.";
} else {
return "Member could not be added as your friend. Please try again later.";
}
} else {
return "Member is already your friend.";
}
} catch (DataException e) {
return "User does not exist.";
} catch (UserNotFoundException e) {
return "User does not exist.";
} catch (Exception e) {
return "Member could not be added as your friend. Please try again later.";
} finally {
if (result) {
sendMail(inviteeID);
}
}
} else {
return "User not logged in.";
}
}
Una forma preferida sería definir una clase que implementa Ejecutable y luego construir un hilo que pasa en el ejemplo Ejecutable. Sub-classing Thread es una forma de herencia de implementación y generalmente no se recomienda. – Adamski