class A {
}
ConcurrentHashMap<A, Integer> map = new ConcurrentHashMap<>();
public void fun() {
Integer count = map.get(Object);
if (count != null) {
map.put(Object, count+1);
}
}
public void add() {
// increase Object count by 1
}
public void remove() {
// deduct Object count by 1
}
どのように私は楽しい()スレッドセーフにすることができような操作をしたいですか?
私はこれを行う方法は、同期ブロック
public void fun() {
synchronized("") {
Integer count = map.get(Object);
if (count != null) {
map.put(Object, count+1);
}
}
}
を追加することです知っている。しかし、それを行うには、他の方法がありますか? それを行うライブラリがありますか?
thread safe entry processor?
は、私もまた ConcurrentHashMap.remove(key, value)見
public void remove() {
int count = map.get(Object);
count -= 5;
if (count <= 0) {
map.remove(Object);
} else {
map.put(Object, count + 2);
}
}
Any ways to do this ?
Thank you
http://stackoverflow.com/a/26214475/4764198をチェックしましたか? – arkki
サンプルコードでは、空の文字列を同期させるかどうかは、インターンの振る舞いや正確な使用パターンに応じて機能するかもしれませんが、一般的な標準的な方法ではありません。同期を使用する場合は、マップ自体または専用のオブジェクトで同期する必要がありますが、空のStringでは同期しないでください。 – GPI
使用しているJavaのバージョンは?これはJava 8では他のバージョンよりずっと簡単です。 –