Sobes.tech
Junior — Middle

Jak zaimplementować liczenie przetworzonych rekordów przy użyciu wielowątkowości?

sobes.tech AI

Odpowiedź od AI

Używając wielowątkowości do liczenia przetworzonych rekordów, ważne jest zapewnienie poprawnej synchronizacji dostępu do licznika, aby uniknąć warunków wyścigu.

Jednym z najprostszych sposobów jest użycie bezpiecznych dla wątków klas z pakietu java.util.concurrent.atomic, na przykład AtomicInteger:

import java.util.concurrent.atomic.AtomicInteger;

public class RecordProcessor {
    private AtomicInteger processedCount = new AtomicInteger(0);

    public void processRecord(Record record) {
        // przetwarzanie rekordu
        // ...

        // bezpieczne zwiększanie licznika
        processedCount.incrementAndGet();
    }

    public int getProcessedCount() {
        return processedCount.get();
    }
}

Jeśli używany jest pula wątków, każdy wątek wywołuje processRecord, a licznik będzie poprawnie zwiększany bez blokad.

Alternatywnie można użyć zablokowanych bloków lub innych mechanizmów synchronizacji, ale AtomicInteger jest prostszy i bardziej wydajny dla takich zadań.