Java Web服务中的互斥

Java Web服务中的互斥,java,web-services,synchronization,Java,Web Services,Synchronization,我有一个这样的方法: 给定id,从数据库中提取对象数据 根据保存在对象中的最后一个数据,处理关联文件中的信息 更新数据库中的对象 该方法位于web服务中,因此许多客户端可以同时调用该方法。如果它们传递不同的id,则没有问题,但如果它们使用相同的id,则可以复制文件中的信息 我无法锁定文件或数据库,我需要一个仅使用id的线程互斥锁。可能使用同步方法,将id标记为已使用,并在更新对象后释放它 我不知道怎么做。可能有一个使用过的ID列表,但是,如何阻止和通知web服务中的线程 谢谢在开始第2步之前,您

我有一个这样的方法:

  • 给定id,从数据库中提取对象数据
  • 根据保存在对象中的最后一个数据,处理关联文件中的信息
  • 更新数据库中的对象
  • 该方法位于web服务中,因此许多客户端可以同时调用该方法。如果它们传递不同的id,则没有问题,但如果它们使用相同的id,则可以复制文件中的信息

    我无法锁定文件或数据库,我需要一个仅使用id的线程互斥锁。可能使用同步方法,将id标记为已使用,并在更新对象后释放它

    我不知道怎么做。可能有一个使用过的ID列表,但是,如何阻止和通知web服务中的线程


    谢谢

    在开始第2步之前,您是否可以在数据库中使用一个顺序号,以便流程进行检查并递增?举个例子,当我得到这个物体时,它上面的序列号是51。当我开始处理文件时,我检查数据库中的文件是否仍然是51,并将其更新为52。如果另一个线程在51时也检索到它,然后尝试运行处理,它将看到我已将序列号更改为52,并且失败。这样的东西符合你的要求吗?如果是这样的话,我会扩展这个评论并把它变成一个答案。我可以,但在第2步中,处理是昂贵的,最好不要重复它(如果不是必要的话)。是的,但根据我的建议,如果另一个线程已经开始了,那么一个线程就不会开始第2步。最困难的部分是,如果第一个线程被中断,该怎么办。哦,这是真的。然后我必须连续两次从数据库中读取数据?我不确定,它也不完全是一个数据库,而是一个搜索引擎,有时更新有点慢:(告诉我关于这个搜索引擎的情况?它是你应用程序的一部分吗?里面有什么可以同步的对象吗?