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> 来处理。