在springmvc的controller层中 synchronized (str) 请问各位大神,request传递的param参数一样,为什么synchronized 同步块不能实现同步? |
|
10分 |
可能和spring产生这个处理器的方式有关。
也就是单例还是多例。 也就是类似struts1和struts2的区别。 也就是说, 应该是这个原因。 再看看大家的解释吧。 good luck |
10分 |
单例的问题估计。 配置上再试试。
|
10分 |
直接把锁加到方法上试试,如果有问题,可能是该类产生了多个实例
如果没有问题,那就是String的实例问题吧 |
spring默认的就是单列 |
|
private Object lock = new Object();
public String test(HttpServletRequest request) { String str=request.getParameter(“param”); synchronized (lock) |
|
public class Test
{ /** t1.start(); public class SynchronizedTest extends Thread public SynchronizedTest(String num) @Override public class SynTestShare System.out.println(Thread.currentThread().getName()+”—-时间:”+getDate()+”————-“+num); public String getDate() 结果: 我写的一个测试列子,红色的new SynTestShare().test(num)每次都是新对象,从测试结果看来是可以同步的,太奇怪了。 |
|
70分 |
每次的str不一定是同一个对象,就像==和equals的问题一样。
synchronized (str.intern()) ,可以这样试试看。 不过最好换个思路,比如做个 Map<String, Lock> 来处理。 |
感谢,synchronized (str.intern())这个可以实现 |
|
private static Object lock=new Object();
synchronized(lock){ //your code…… } |