在我的spring-hibernate应用程序中,它也有JMS,多个消费者同时访问一个方法,该方法为我们提供了将对象记录到MySQL数据库的持久性。由于该方法的并发访问,我在其中编写的逻辑在某些情况下会失败。我分享的逻辑如下:
// check the current sourceId whether is included or not in log table
List<MyLogObject> logs = logService.findBySourceId(currentSourceId);
if(logs.size() == 0){
logService.persist(currentLogObject);
}
正如你所看到的,如果多个消费者同时访问这个代码块,log的大小应该为0,因此它们持久化同一个对象两次或更多次。
在JMS和多个消费者使用的情况下,我如何避免对象的多个持久化?
是否可以通过使用Java的syncronized
特性来实现?
1条答案
按热度按时间h9vpoimq1#
是的,我认为如果包含这个日志记录方法的对象在许多线程之间共享,那么在这里有一个锁并在该锁上使用synchronized应该确实有效。
它应该像这样简单: