以下のコード スニペットをスレッド セーフにする方法がわかりません。
class MapUser {
Map<String,Integer> map = new ConcurrentHashMap<String,Integer>
public void addToMap(String str, Integer val){
if(checkMagicString(str)){
map.put(str,val);
}
}
private boolean checkMagicString(String str){
//some logic to check Magic
//this logic involved operation on the String parameter str i.e. subString,toCharArray etc
}
}
メソッド addToMap は複数のスレッドによって同時に呼び出されることに注意してください。スレッドセーフが維持されていることを確認したい。ConcurrentHashMap を使用することで、スレッドが値を安全に追加することを保証できます。
しかし、メソッド checkMagicString(String str) がどのようにスレッドセーフなままでいられるのか理解できませんか? それを同期させる唯一の方法はありますか?それとも、呼び出し元メソッド addToMap を同期化する必要がありますか? checkMagicString メソッド内でマップにアクセスしていないことに注意してください。