维护有感3 -- 被滥用的synchronized

同样要先看一段代码,这是一段方法内部的代码:

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也不需要做同步,用同步肯定自己策略本身就是危险的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值