同样要先看一段代码,这是一段方法内部的代码:
先不说代码中变量的命名是否显得苍白,主要的问题就是这个synchronized 使用,
temp 是一个局部变量,一个方法内的局部变量,而java的方法的执行每次调用都会产生不懂的方法内局部变量,那真不知道 synchronized (temp)的用处在什么地方。
[size=medium][color=blue]补充:[/color][/size]
java中方法是线程安全的,对于局部变量来说,根本没有必要用synchronized,如果需要用到synchronized来做特殊处理,那肯定是自己的设计出了问题,要选择修改自己的策略,而不是通过这样的办法。甚至本人觉得局部变量的就是用StringBuilder也不需要做同步,用同步肯定自己策略本身就是危险的。
StringBuffer temp = new StringBuffer(64);
synchronized (temp) {
String cgbh = Decoder.getParameter(request, "cgbh");
temp.append("INSERT INTO LWZZWCRXX (ID, XMBH, ZGH, XM) (SELECT ");
temp.append(" IDC_U_KYMIS.KY_XMRYXX_SEQ.NEXTVAL, CGBH, '");
temp.append(UserToken.getUserid(request)).append("','");
temp.append(UserToken.getUser(request).getUserName() + "'");
temp.append(" FROM ( ");
temp.append("SELECT NVL(TO_CHAR(MAX(TO_NUMBER(CGBH))), '").append(cgbh).append("' || '0000') CGBH");
temp.append(" FROM LWZZ WHERE CGBH LIKE '").append(cgbh).append("%'))");
return temp.toString();
}
先不说代码中变量的命名是否显得苍白,主要的问题就是这个synchronized 使用,
temp 是一个局部变量,一个方法内的局部变量,而java的方法的执行每次调用都会产生不懂的方法内局部变量,那真不知道 synchronized (temp)的用处在什么地方。
[size=medium][color=blue]补充:[/color][/size]
java中方法是线程安全的,对于局部变量来说,根本没有必要用synchronized,如果需要用到synchronized来做特殊处理,那肯定是自己的设计出了问题,要选择修改自己的策略,而不是通过这样的办法。甚至本人觉得局部变量的就是用StringBuilder也不需要做同步,用同步肯定自己策略本身就是危险的。