Tôi đang viết một ứng dụng mà người dùng có thể thêm và xóa người dùng khác làm bạn bè. Trang của tôi có danh sách những người dùng khác nhau và mỗi người dùng được cung cấp một nút để thêm họ vào danh sách bạn bè. Tôi đang gửi một yêu cầu AJAX tới Java servlet để thêm người dùng đã chọn làm bạn. Tôi đang hiển thị thông báo cảnh báo tại giao diện người dùng để hiển thị kết quả của quá trình.Chạy quá trình nền trong các chủ đề khác nhau trong Java
Vấn đề của tôi là tôi phải gửi thư khi người dùng được thêm làm bạn bè, mã này được viết bằng cùng một phương thức trong servlet.
Vì đoạn mã này, thông báo cảnh báo của tôi đến trễ.
Tôi cần chạy một pthread riêng để chạy chức năng gửi thư này để khi người dùng được thêm tôi sẽ nhận được kết quả và thư sẽ được gửi trong quá trình riêng biệt.
Mã của tôi trong Servlet là
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.";
}
}
Cách ưu tiên sẽ là xác định một lớp thực hiện Runnable và sau đó tạo chủ đề truyền trong thể hiện Runnable. Sub-classing Thread là một hình thức kế thừa thực hiện và thường không được khuyến khích. – Adamski