# Executor व Future — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-executors

> ExecutorService से टास्क सबमिशन को थ्रेड प्रबंधन से अलग करें, Callable चलाएँ, Future से परिणाम लें, और पूल हमेशा shutdown करें।

## पूल को काम सौंपें

`ExecutorService` टास्क सबमिशन को थ्रेड प्रबंधन से अलग करता है। `submit` एक `Future` लौटाता है।

```java
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()` — प्रति टास्क एक वर्चुअल थ्रेड, पूल आकार तय करने की ज़रूरत नहीं।

```java
try (var pool = Executors.newVirtualThreadPerTaskExecutor()) {
    urls.forEach(url -> pool.submit(() -> fetch(url)));
}
```
