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:

  1. Magyarázd el, miért NEM determinisztikus a kimenet.
  2. Írd át a kódot úgy, hogy Java 8 alatt minden futásnál pontosan 1000 legyen az eredmény.
  3. 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!

Válasz

Kattints és írd meg nekünk a válaszod.

Kapcsolatfelvétel

Rólunk mondták

“ A Geotrace által fejlesztett rendszerekkel jelentősen csökkent a belső IT költségünk és gyorsabbá váltak az üzleti folyamataink. ” – IT vezető, Pénzügyi szektor