MulaiMulai sekarang secara gratis

Menerapkan thread pool untuk pemrosesan batch

Bayangkan Anda sedang mengembangkan sistem pemrosesan dokumen yang harus menangani banyak dokumen secara bersamaan. Setiap dokumen memerlukan pemrosesan intensif yang sebaiknya dijalankan secara paralel, namun Anda ingin membatasi jumlah operasi bersamaan untuk mencegah beban berlebih pada sistem. Anda akan menerapkan solusi menggunakan ExecutorService untuk mengelola beban kerja pemrosesan secara efisien.

Latihan ini adalah bagian dari kursus

Optimasi Kode di Java

Lihat Kursus

Petunjuk latihan

  • Buat fixed thread pool yang berisi 3 thread.
  • Ajukan metode processDocument(doc) sebagai task ke executor.
  • Hentikan executor tanpa memaksa terminasi secara langsung.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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";
    }
}
Edit dan Jalankan Kode