I Operationen wieThema sichere Betrieb in einem Eintrag
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
}
tun wollen Wie kann ich Spaß() Thread-sicher zu machen?
weiß, dass ich einen Weg, dies zu tun ist
synchronisiert Block hinzufügenpublic void fun() {
synchronized("") {
Integer count = map.get(Object);
if (count != null) {
map.put(Object, count+1);
}
}
}
Aber gibt es andere Möglichkeiten, es zu tun? Oder gibt es Bibliotheken dafür?
wie Thread-Safe-Entry-Prozessor?
Ich möchte auch so etwas wie
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
Haben Sie http://StackOverflow.com/a/26214475/4764198 überprüft? – arkki
In Ihrem Beispielcode kann die Synchronisation auf die leere Zeichenfolge abhängig vom Verhalten des Praktikums und des genauen Verwendungsmusters funktionieren oder nicht, aber es ist im Allgemeinen nicht üblich. Wenn Sie die Synchronisierung verwenden, sollten Sie entweder auf der Karte selbst oder auf einem dedizierten Objekt, aber nicht auf der leeren Zeichenfolge synchronisieren. – GPI
Welche Java-Version verwenden Sie? Dies ist in Java 8 viel einfacher als in anderen Versionen. –