Sobes.tech
Junior — Middle

Cum se implementează multitreading-ul pentru procesarea unui volum mare de sarcini, de exemplu, 10.000 de sarcini?

sobes.tech AI

Răspuns de la AI

Pentru procesarea unui volum mare de sarcini (de exemplu, 10.000 de sarcini) în Java, este eficient să folosiți un pool de fire din java.util.concurrent.

Pașii principali:

  1. Creați un ExecutorService cu o dimensiune fixă sau dinamică a pool-ului de fire.
  2. Trimiteți sarcinile pentru execuție folosind submit() sau execute().
  3. Așteptați finalizarea tuturor sarcinilor și închideți corect pool-ul.

Exemplu:

import java.util.concurrent.*;

public class TaskProcessor {
    public static void main(String[] args) throws InterruptedException {
        int numberOfTasks = 10000;
        int poolSize = Runtime.getRuntime().availableProcessors();

        ExecutorService executor = Executors.newFixedThreadPool(poolSize);

        for (int i = 0; i < numberOfTasks; i++) {
            final int taskId = i;
            executor.submit(() -> {
                // Procesarea sarcinii
                System.out.println("Se procesează sarcina " + taskId);
                // ...
            });
        }

        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.HOURS);
    }
}

Această abordare permite utilizarea eficientă a resurselor CPU și gestionarea numărului de fire care rulează simultan, evitând crearea unui număr excesiv de fire, ceea ce poate duce la scăderea performanței.