日期:2014-05-18  浏览次数:21183 次

springmvc 的controller层中synchronized块同步问题
在springmvc的controller层中
       
       @RequestMapping("/test")
public String test(HttpServletRequest request)
{
           String str=request.getParameter("param");

              synchronized (str)
              {
                   //
               }
        }

请问各位大神,request传递的param参数一样,为什么synchronized 同步块不能实现同步?
------解决方案--------------------
可能和spring产生这个处理器的方式有关。
也就是单例还是多例。
也就是类似struts1和struts2的区别。

也就是说,
如果是struts1的模式
每次发起一个请求,都是同一个action来处理,那么写个同步块还是有效果的。
如果是struts2的模式
每次发起一个请求,都是单独的action来处理,那么写个同步也就没有效果了。
因为本来就不是一个同一个程序块在处理。

应该是这个原因。

再看看大家的解释吧。

good luck

------解决方案--------------------
单例的问题估计。 配置上再试试。
------解决方案--------------------
直接把锁加到方法上试试,如果有问题,可能是该类产生了多个实例
如果没有问题,那就是String的实例问题吧
------解决方案--------------------
每次的str不一定是同一个对象,就像==和equals的问题一样。
synchronized (str.intern()) ,可以这样试试看。
不过最好换个思路,比如做个 Map<String, Lock> 来处理。