Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
💡 Как управлять потоками с помощью ExecutorCompletionService

ExecutorCompletionService — это инструмент для удобной работы с потоками, позволяющий эффективно управлять задачами, выполняющимися асинхронно, и получать результаты по мере их готовности. Он сочетает в себе возможности ExecutorService и очередь для получения результатов выполнения задач.

📌 Преимущества ExecutorCompletionService:
1️⃣ Удобное управление задачами: позволяет управлять и отслеживать несколько асинхронных задач одновременно.
2️⃣ Получение результатов по мере выполнения: результаты задач можно получать в том порядке, в котором они завершены.
3️⃣ Обработка ошибок: позволяет перехватывать исключения, возникающие в процессе выполнения задач.

📌 Пример использования ExecutorCompletionService:
import java.util.concurrent.*;

public class ExecutorCompletionServiceExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(3);
ExecutorCompletionService<Integer> completionService = new ExecutorCompletionService<>(executor);

// Добавляем задачи в очередь
for (int i = 0; i < 5; i++) {
final int taskId = i;
completionService.submit(() -> {
// Задача выполняется
Thread.sleep(1000); // Эмулируем работу
return taskId * 2;
});
}

// Получаем результаты по мере их готовности
for (int i = 0; i < 5; i++) {
Future<Integer> result = completionService.take(); // Возвращает первый завершившийся результат
System.out.println("Задача завершена с результатом: " + result.get());
}

executor.shutdown();
}
}


📌 Как это работает:
1️⃣ Создаём ExecutorCompletionService, передавая ему пул потоков.
2️⃣ Задачи отправляются в очередь с помощью метода submit().
3️⃣ Метод take() извлекает завершённую задачу и её результат.
4️⃣ Метод get() позволяет получить результат выполнения задачи.

📌 Когда использовать ExecutorCompletionService?
- Когда необходимо параллельно выполнить несколько задач и получить результаты по мере их завершения.
- В ситуациях, когда задачи могут занять разное время на выполнение.
- Для эффективного управления потоками в многозадачных приложениях.

💡 Совет: Используйте ExecutorCompletionService для повышения производительности, когда важно обрабатывать результаты задач в порядке их завершения.

#Java #ExecutorCompletionService #ПараллельноеВыполнение #Многозадачность
👍153