gpt4 book ai didi

java - 同步方法的最佳方式

转载 作者:行者123 更新时间:2023-12-01 14:22:48 25 4
gpt4 key购买 nike

我正在开发任务管理类型的应用程序。因此,当有人完成任务时,任务创建者会通过电子邮件发送一条包含任务 URL 的消息。我正在使用 spring MVC 来创建这个应用程序。所以现在的问题是,当几乎同时创建两个任务时,第一个任务的电子邮件我会收到为第二个任务生成的 URL。

我编写了以下方法来执行此功能

 @RequestMapping(value = "commentTask", method = RequestMethod.POST)
@ResponseBody public List<List<Task>> reply(@ModelAttribute Task task,@RequestParam ("parentId") long parentId,HttpSession session) {
List<List<Task>> listTasks = null;

taskEntryService.insertTask(task,session);

listTasks = taskEntryService.selectAssignedTask(task.getAssignTo(), parentId);

String taskurl = siteUrl + "showAssignedTask?assignto="+ task.getAssignTo() + "&taskId="+parentId;

if(task.getTaskUpdateEmailNotify().equalsIgnoreCase("1")){

try {

if(task.getStatus() == 4){

String completedTaskBody = taskCompletedEmailBody(taskurl, task.getAssignToName(), task.getTaskTitle(), task.getAssignerName(), task.getSummary());

sendmailService.sendMail("no-reply@gmail.com", task.getTaskCreatorEmail(), "Your Task has been Completed", completedTaskBody);
}
} catch (AddressException e) {
e.printStackTrace();
}

}

return listTasks;
}

那么同步此方法的最佳方式是什么。

如果需要更多详细信息,请告诉我

最佳答案

同步对此方法的访问的最简单方法当然是在签名中将其标记为synchronized

 @RequestMapping(value = "commentTask", method = RequestMethod.POST)
@ResponseBody
public synchronized List<List<Task>> reply(@ModelAttribute Task task,
@RequestParam ("parentId") long parentId,
HttpSession session) {

在我看来,这里的同步不太可能解决您的问题,因为代码似乎没有任何特定的竞争条件:它会小心地从提供的 Task 对象构造完整的 URL。我怀疑您的 Task 对象不是线程安全的,或者传入了错误的 parentId

关于java - 同步方法的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com