public void tSafe(List<Foo> list, Properties status) {
if(list == null) return;
String key = "COUNT";
AtomicInteger a = new AtomicInteger(Integer.valueOf(status.getProperty(key,"0")));
list.parallelStream().filter(Foo::check).
forEach(foo -> {status.setProperty(key, String.valueOf(a.incrementAndGet())); }
);
}
private interface Foo {
public boolean check();
}
Beschreibung:Können wir AtomicInteger als lokale Variable in einer Methode verwenden und Thread-Sicherheit erreichen?
In dem obigen Beispiel Status ist eine gemeinsame Eigenschaften und es enthält einen Schlüssel mit dem Namen COUNT. Mein Ziel ist es, die Anzahl zu erhöhen und sie in Eigenschaften zurückzusetzen, um die Anzahl der durchgeführten Prüfungen zu zählen. Beachten Sie, dass die tSafe-Methode von mehreren Threads aufgerufen wird. Erhalte ich am Ende die korrekte Anzahl? Beachten Sie, dass ich AtomicInteger a als lokale Variable verwendet habe.
Gewindesicherheit ist nicht die Art von Sache, für die das Bestreuen verschiedener Multithreading-Konstrukte Thread-Sicherheit erzeugt. – Raedwald