我正在编写一个应用程序,用户可以在其中添加和删除其他用户作为朋友。 我的页面有一个不同的用户列表,每个用户都有一个按钮将它们添加到好友列表中。 我正在向Java servlet发送一个AJAX请求,以将所选用户添加为朋友。 我在UI上显示警报消息以显示过程结果。在Java的不同线程中运行后台进程
我的问题是我必须发送邮件时,用户被添加为朋友这段代码是写在同一个方法在servlet中。
由于这段代码,我的警报消息来得很晚。
我需要运行一个单独的pthread来运行这个发送邮件函数,这样一旦用户被添加,我将得到结果,邮件将在单独的进程中发送。
我在Servlet代码
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.";
}
}
一种优选的方法是定义一个实现Runnable一个类,然后构造一个线程传递了Runnable实例。子分类线程是一种实现继承的形式,通常不推荐使用。 – Adamski 2010-01-20 09:36:40