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();
}
Descrizione:È possibile utilizzare AtomicInteger come variabile locale in un metodo e ottenere la sicurezza dei thread?
Nell'esempio di cui sopra, lo stato è una proprietà condivise e contiene una chiave con nome COUNT. Il mio obiettivo è incrementare il conteggio e reinserirlo nelle proprietà per contare il numero di controlli eseguiti. Si consideri che il metodo tSafe viene chiamato da più thread, ottengo il conteggio corretto alla fine? Nota che ho usato AtomicInteger a come variabile locale.
La sicurezza del filo non è il tipo di cosa per cui spruzzare attorno a vari costrutti multithread produce la sicurezza del filo. – Raedwald