ПочатиПочніть безкоштовно

Реалізація пула потоків для пакетної обробки

Уявімо, що ви розробляєте систему обробки документів, яка має працювати з кількома документами одночасно. Кожен документ потребує інтенсивної обробки, яку слід виконувати паралельно, але ви хочете обмежити кількість одночасних операцій, щоб не перевантажувати систему. Ви реалізуєте розв'язання за допомогою ExecutorService, щоб ефективно керувати навантаженням на обробку.

Ця вправа є частиною курсу

Оптимізація коду в Java

Переглянути курс

Інструкції до вправи

  • Створіть фіксований пул потоків із 3 потоків.
  • Передайте метод processDocument(doc) як завдання до виконувача.
  • Завершіть роботу виконувача без примусового негайного зупинення.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

public class DocumentProcessor {
    public static void main(String[] args) throws InterruptedException {
        List documents = List.of("Doc1", "Doc2", "Doc3", "Doc4", "Doc5");
        List> futures = new ArrayList<>();
        
        // Create a fixed thread pool with 3 threads
        ExecutorService executor = Executors.____(____);

        for (String doc : documents) {
            // Submit the processDocument() method to the executor
            futures.add(executor.submit(() -> ____(____)));
        }
        
        // Shutdown the executor and wait for termination
        executor.____();
        executor.awaitTermination(10, TimeUnit.SECONDS);
        
        try {
            for (Future future : futures) {
                System.out.println(future.get());
            }
        } catch (ExecutionException e) {
            System.out.println("Error processing documents: " + e.getMessage());
        }
    }

    private static String processDocument(String docId) throws InterruptedException {
        System.out.println("Processing " + docId + " on thread " + Thread.currentThread().getName());
        Thread.sleep((long) (Math.random() * 1000));
        return docId + " Processed";
    }
}
Редагувати та запускати код