java - 同时多次调用方法的问题

标签 java singleton

我有这个方法

@RequestMapping(value = "/affaires",
        method = RequestMethod.POST,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
public ResponseEntity<Affaire> createAffaire(@RequestBody Affaire affaire, HttpServletRequest request) throws URISyntaxException {
  Long idMax = affaireRepository.getMaxId();
  affaire.setReferenceAffaire("AF_"+LocalDate.now().getYear()+" - "+idMax);
  Affaire result = affaireRepository.save(affaire);

我的问题:在我的数据库中,我有 2 个具有相同 ReferenceAffaire 的事务。

所以我猜测该方法在同一时间被调用两次,并且每次 idMax 都是相同的。
有没有办法避免这个方法在同一时间被多次调用?

最佳答案

在函数声明中添加synchronized。这完全阻止了您想要的事情:想要同时调用此函数的线程被放入队列中并一个接一个地执行

public synchronized ResponseEntity<Affaire> createAffaire(@RequestBody Affaire affaire, HttpServletRequest request) throws URISyntaxException {

参见 documentation在这里。

关于java - 同时多次调用方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750878/

相关文章:

c# - 我们应该密封单例吗?我们应该首先尝试继承单例吗?

Python 单例设计模式跟踪应用程序统计信息

c# - 单例替换?

java - 调度作业在集群上执行两次

Java MySQL SSL 错误

java - Maven 发布插件 : specify java compiler version

design-patterns - 用什么替换单例?

java - Java 中的 C 静态变量行为

java - 为什么我无法查询 SolrJ 的 URL?

java - 在java单例中获取内部类的实例