Zacznij terazZacznij za darmo

Implementacja puli wątków do przetwarzania wsadowego

Wyobraź sobie, że tworzysz system do przetwarzania dokumentów, który musi obsługiwać wiele dokumentów jednocześnie. Każdy dokument wymaga intensywnego przetwarzania wykonywanego równolegle, jednak chcesz ograniczyć liczbę jednoczesnych operacji, aby nie przeciążyć systemu. Zaimplementujesz rozwiązanie oparte na ExecutorService, które pozwoli efektywnie zarządzać obciążeniem.

To ćwiczenie jest częścią kursu

Optymalizacja kodu w Javie

Zobacz kurs

Instrukcje do ćwiczenia

  • Utwórz stałą pulę wątków zawierającą 3 wątki.
  • Przekaż metodę processDocument(doc) jako zadanie do executora.
  • Zakończ działanie executora bez wymuszania natychmiastowego zatrzymania.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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";
    }
}
Edytuj i uruchom kod