पाठ 8 / 38
Executor व Future
ExecutorService से टास्क सबमिशन को थ्रेड प्रबंधन से अलग करें, Callable चलाएँ, Future से परिणाम लें, और पूल हमेशा shutdown करें।
पूल को काम सौंपें
ExecutorService टास्क सबमिशन को थ्रेड प्रबंधन से अलग करता है। submit एक Future लौटाता है।
try (var pool = Executors.newFixedThreadPool(4)) {
List<Future<Integer>> fs = pool.invokeAll(tasks);
for (Future<Integer> f : fs) total += f.get();
} // close() shuts down and waits (Java 19+)सही पूल चुनें
बाउंडेड CPU काम के लिए newFixedThreadPool(n), छोटे-छोटे कई टास्क के लिए newCachedThreadPool(), और हज़ारों ब्लॉकिंग IO टास्क के लिए Java 21 का newVirtualThreadPerTaskExecutor() — प्रति टास्क एक वर्चुअल थ्रेड, पूल आकार तय करने की ज़रूरत नहीं।
try (var pool = Executors.newVirtualThreadPerTaskExecutor()) {
urls.forEach(url -> pool.submit(() -> fetch(url)));
}