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
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";
}
}