Sobes.tech
Junior — Middle

Jak zaimplementować wielowątkowość do obsługi dużej ilości zadań, na przykład 10 000 zadań?

sobes.tech AI

Odpowiedź od AI

Aby efektywnie przetwarzać dużą ilość zadań (np. 10 000 zadań) w Java, warto użyć puli wątków z java.util.concurrent.

Główne kroki:

  1. Utwórz ExecutorService z ustalonym lub dynamicznym rozmiarem puli wątków.
  2. Wyślij zadania do wykonania za pomocą submit() lub execute().
  3. Poczekaj na zakończenie wszystkich zadań i poprawnie zamknij pulę.

Przykład:

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(() -> {
                // Przetwarzanie zadania
                System.out.println("Przetwarzanie zadania " + taskId);
                // ...
            });
        }

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

Ten sposób pozwala na efektywne wykorzystanie zasobów CPU i zarządzanie liczbą jednocześnie wykonywanych wątków, unikając tworzenia zbyt wielu wątków, co mogłoby obniżyć wydajność.