Junior — Middle
Hoe implementeer je het tellen van verwerkte records bij het gebruik van multithreading?
sobes.tech AI
Antwoord van AI
При использовании многопоточности для подсчета обработанных записей важно обеспечить корректную синхронизацию доступа к счетчику, чтобы избежать условий гонки.
Один из простых способов — использовать потокобезопасные классы из пакета java.util.concurrent.atomic, например, AtomicInteger:
import java.util.concurrent.atomic.AtomicInteger;
public class RecordProcessor {
private AtomicInteger processedCount = new AtomicInteger(0);
public void processRecord(Record record) {
// обработка записи
// ...
// безопасное увеличение счетчика
processedCount.incrementAndGet();
}
public int getProcessedCount() {
return processedCount.get();
}
}
Если используется пул потоков, каждый поток вызывает processRecord, и счетчик будет корректно увеличиваться без блокировок.
Альтернативно можно использовать синхронизированные блоки или другие механизмы синхронизации, но AtomicInteger проще и эффективнее для таких задач.