質問失礼します。

private static final Map<String,String> tmpMap = new java.util.concurrent.ConcurrentHashMap<String,String>();

public void run() {
String uniqueKey = "hogehoge";

while(true) {
if(!tmpMap.containsKey(uniqueKey)) {
String data = getData();
tmpMap.put(data,uniqueKey);
String tmpLocalKey = tmpMap.get(data);
if(uniqueKey.equals(tmpLocalKey ) {
somethingDoTask();
}
}
}
}


簡単に言うと上記のようなソースがあり4スレッドくらいを並列で動かしてます
マップはロックのような形で使用し、あるデータ名をキーにし4つのスレッドの内
1つだけが処理を行うような仕組みです。

ですが、実際は重複して実行しているようです。
このマップを使う事が間違いでしょうか?