Sobes.tech
Back to questions
Junior — Middle
69

Каким образом реализовать многопоточность для обработки большого объема заданий, например, 10 000 задач?

Companies where asked
Формат кодаФормат кода

Answer from AI

sobes.tech AI

Для обработки большого объема заданий (например, 10 000 задач) в Java эффективно использовать пул потоков из java.util.concurrent.

Основные шаги:

  1. Создать ExecutorService с фиксированным или динамическим размером пула потоков.
  2. Отправить задачи на выполнение через submit() или execute().
  3. Дождаться завершения всех задач и корректно завершить пул.

Пример:

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(() -> {
                // Обработка задачи
                System.out.println("Обрабатывается задача " + taskId);
                // ...
            });
        }

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

Такой подход позволяет эффективно использовать ресурсы CPU и управлять количеством одновременно выполняемых потоков, избегая создания слишком большого числа потоков, что может привести к снижению производительности.