totalBadRecords()
他のメソッド内からメソッドを呼び出す複数のスレッドがある場合、スレッド/同時実行性の下のコードは安全ですか? このメソッドへのマップ オブジェクト パラメータは両方とも ですConcurrentHashMap
。各呼び出しが合計を適切に更新するようにしたいと考えています。
安全でない場合は、スレッドの安全性を確保するために何をしなければならないかを説明してください。
add/put を同期する必要がありますか、それとももっと良い方法がありますか?
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());
}