日期:2014-05-20  浏览次数:20731 次

请教一个web开发中关于synchronized的问题,急,急,急!!!
现在在做一个网络支付相关的平台,是一个典型的SSH架构。
其中有一个合作的支付平台(例如支付宝),名字为A,当用户在我们的平台生产订单,到A平台进行支付后,A平台会同时发出两个通知,对应我们这个平台的两个接口,这两个接口会同时调用service层的一个核心业务,这个核心业务包括更改订单状态、发货、记录流水账目等等。其中记录流水账目这里,订单号是唯一的,但是在有些时候,因为两个接口同时执行这个核心业务,所以会同时insert一条新的流水账目,导致sql异常,所以这里我想做成同步的(在insert之前有一个检查的过程,如果这条订单的流水账目存在了就不会再insert),保证业务不会抛出异常。我想在这个service层的这个核心业务类的方法前加上synchronized,但是困惑如下:
仔细的回想了一下synchronized,是保证此对象的这个方法不会同时被多个线程访问。因为web应用是多线程的,那么是否会产生多个service类的对象导致这个方法同步失效呢?如果会出现这个情况,这里我应该如何保证所有的线程访问这个service类的核心方法时是同步安全的?
谢谢。

------解决方案--------------------
只要没有用错,是不用担心同步失败的
------解决方案--------------------
这个要看你的SERVICE类是单例还是多例了