当有多个线程totalBadRecords()
从其他方法内部调用该方法时,线程/并发下面的代码是否安全?此方法的两个映射对象参数都是ConcurrentHashMap
. 我想确保每次通话都能正确更新总数。
如果不安全,请解释我必须做什么来确保线程安全。
我需要同步添加/放置还是有更好的方法?
我需要同步TestVO中的get方法吗?TestVO 是简单的 java bean,具有 getter/setter 方法。
下面是我的示例代码:
public void totalBadRecords(final Map<Integer, TestVO> sourceMap,
final Map<String, String> logMap) {
BigDecimal badCharges = new BigDecimal(0);
boolean badRecordsFound = false;
for (Entry<Integer, TestVO> e : sourceMap.entrySet()) {
if ("Y".equals(e.getValue().getInd()))
badCharges = badCharges.add(e.getValue()
.getAmount());
badRecordsFound = true;
}
if (badRecordsFound)
logMap.put("badRecordsFound:", badCharges.toPlainString());
}