Sobes.tech
Назад к вопросам
Junior — Middle
65

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

Компании, где спрашивали
Формат кодаФормат кода

Ответ от нейросети

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 и управлять количеством одновременно выполняемых потоков, избегая создания слишком большого числа потоков, что может привести к снижению производительности.