Fejtörők - Senior Java Puzzle
Concurrent Hash Map kihívás
Az alábbi Java 8 kódrészlet nem determinisztikus eredményt ad. Elemezd ki a problémát, majd javítsd ki úgy, hogy minden futtatásnál ugyanazt az eredményt adja.
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Puzzle {
public static void main(String[] args) throws Exception {
final Map<String, Integer> map = new ConcurrentHashMap<>();
map.put("counter", 0);
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
Integer v = map.get("counter");
map.put("counter", v + 1);
}
}).start();
}
Thread.sleep(200);
System.out.println("Result = " + map.get("counter"));
}
}
Feladatok:
- Magyarázd el, miért NEM determinisztikus a kimenet.
- Írd át a kódot úgy, hogy Java 8 alatt minden futásnál pontosan 1000 legyen az eredmény.
- Implementáld a javított megoldást legalább egy másik nyelven is (Python, C#, Kotlin vagy JavaScript).
A megoldást küldd el számunkra!