ExecutorService और Thread Pool के प्रकार
fixed, cached, single और scheduled thread pools बनाएँ तथा समझें कि प्रत्येक का उपयोग कब करना है।
ExecutorService और Thread Pool के प्रकार, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
थ्रेड पूल का उपयोग क्यों करें?
हर कार्य के लिए नया Thread बनाना महँगा होता है—थ्रेड बनाने और नष्ट करने में अतिरिक्त लागत आती है। एक थ्रेड पूल कई कार्यों को चलाने के लिए थ्रेडों के एक निश्चित समूह का पुनः उपयोग करता है, जिससे अतिरिक्त लागत घटती है और संसाधनों की खपत नियंत्रित रहती है।
import java.util.concurrent.*;
// Bad practice: new thread per task
new Thread(() -> System.out.println("task")).start();
// Better: reuse threads from a pool
ExecutorService pool = Executors.newFixedThreadPool(4);
pool.submit(() -> System.out.println("task from pool"));
pool.shutdown();newFixedThreadPool
ठीक N थ्रेडों वाला पूल बनाता है। अतिरिक्त कार्य तब तक कतार में रहते हैं, जब तक कोई थ्रेड उपलब्ध न हो जाए। जब आपको वांछित समानांतरता का स्तर पता हो, तब यह उपयोगी है।
ExecutorService pool = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
final int taskId = i;
pool.submit(() -> {
System.out.println("Task " + taskId + " on " + Thread.currentThread().getName());
});
}
pool.shutdown();
pool.awaitTermination(10, TimeUnit.SECONDS);newCachedThreadPool
माँग के अनुसार थ्रेड बनाता है और निष्क्रिय थ्रेडों का पुनः उपयोग करता है। 60 सेकंड तक निष्क्रिय रहने वाले थ्रेड समाप्त कर दिए जाते हैं। कई कम समय वाले कार्यों के लिए यह उपयोगी है; लंबे समय तक चलने वाले या असीमित कार्यों के लिए जोखिमपूर्ण है, क्योंकि इससे मेमोरी समाप्त हो सकती है।
ExecutorService cached = Executors.newCachedThreadPool();
for (int i = 0; i < 100; i++) {
cached.submit(() -> {
// quick task
double result = Math.sqrt(Math.random());
});
}
cached.shutdown();newSingleThreadExecutor
ठीक एक थ्रेड वाला पूल। कार्य सबमिट किए जाने के क्रम में क्रमिक रूप से चलते हैं। किसी साझा संसाधन तक पहुँच को क्रमबद्ध करने के लिए यह उपयोगी है।
ExecutorService single = Executors.newSingleThreadExecutor();
single.submit(() -> System.out.println("Task 1"));
single.submit(() -> System.out.println("Task 2"));
single.submit(() -> System.out.println("Task 3"));
// Always prints: Task 1, Task 2, Task 3 (sequential)
single.shutdown();newScheduledThreadPool
निर्धारित और बार-बार चलने वाले कार्यों का समर्थन करता है। इसका उपयोग पोलिंग, पुनःप्रयास और पृष्ठभूमि रखरखाव के लिए करें।
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
// One-shot delay
scheduler.schedule(() -> System.out.println("Delayed!"),
3, TimeUnit.SECONDS);
// Fixed rate (every 2 seconds)
scheduler.scheduleAtFixedRate(
() -> System.out.println("Tick"),
0, 2, TimeUnit.SECONDS);
// Run later: scheduler.shutdown();VirtualThreadExecutor (Java 21+)
Java 21 में वर्चुअल थ्रेड प्रस्तुत किए गए हैं—ये हल्के होते हैं और इन्हें बनाना सस्ता होता है। I/O-प्रधान कार्यभार के लिए Executors.newVirtualThreadPerTaskExecutor() का उपयोग करें:
// Java 21+
try (var exec = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10_000; i++) {
final int id = i;
exec.submit(() -> {
Thread.sleep(100); // blocks without tying up OS thread
System.out.println("vthread " + id);
});
}
} // auto-shutdownसही पूल चुनना
दिशानिर्देश:
- CPU-प्रधान कार्य: N = CPU कोर की संख्या वाला स्थिर पूल
- I/O-प्रधान कार्य: कैश्ड पूल या वर्चुअल थ्रेड
- क्रमिक कार्य: एकल-थ्रेड एक्ज़ीक्यूटर
- निर्धारित/बार-बार चलने वाले कार्य: निर्धारित थ्रेड पूल
int cores = Runtime.getRuntime().availableProcessors();
ExecutorService cpuPool = Executors.newFixedThreadPool(cores);
System.out.println("Pool size: " + cores);कस्टम ThreadPoolExecutor
सूक्ष्म स्तर पर नियंत्रण के लिए सीधे ThreadPoolExecutor बनाएँ:
ThreadPoolExecutor tpe = new ThreadPoolExecutor(
2, // corePoolSize
10, // maximumPoolSize
60L, // keepAliveTime
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100), // work queue
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy() // rejection policy
);
tpe.submit(() -> System.out.println("Custom pool task"));
tpe.shutdown();सुव्यवस्थित शटडाउन
थ्रेड मुक्त करने के लिए ExecutorService को हमेशा बंद करें। shutdown() नए कार्य स्वीकार करना बंद करता है, लेकिन कतार में मौजूद कार्य पूरे करता है। shutdownNow() चल रहे कार्यों को रद्द करने का प्रयास करता है।
ExecutorService pool = Executors.newFixedThreadPool(4);
// ... submit tasks ...
pool.shutdown(); // no new tasks
try {
if (!pool.awaitTermination(30, TimeUnit.SECONDS)) {
pool.shutdownNow(); // force cancel
}
} catch (InterruptedException e) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}AutoCloseable के रूप में ExecutorService (Java 19+)
Java 19+ में ExecutorService, AutoCloseable को लागू करता है। स्वचालित शटडाउन के लिए try-with-resources का उपयोग करें:
// Java 19+ (preview), Java 21 stable
try (ExecutorService pool = Executors.newFixedThreadPool(4)) {
pool.submit(() -> System.out.println("task"));
} // pool.close() called: waits for tasks then shuts downअस्वीकृति नीतियाँ
जब पूल पूरी तरह व्यस्त हो (सभी थ्रेड व्यस्त हों और कतार भर गई हो), तब अस्वीकृति नीति अतिरिक्त कार्यों को संभालती है:
- AbortPolicy (डिफ़ॉल्ट):
RejectedExecutionExceptionउत्पन्न करता है - CallerRunsPolicy: कॉल करने वाला थ्रेड कार्य चलाता है
- DiscardPolicy: कार्य को चुपचाप हटा देता है
- DiscardOldestPolicy: कतार में सबसे पुराने कार्य को हटा देता है
त्वरित जाँच
आपके पास CPU-प्रधान कार्य है जो भारी गणना करता है। आपके स्थिर थ्रेड पूल में कितने थ्रेड होने चाहिए?
पुनरावलोकन: ExecutorService और थ्रेड पूल
मुख्य बातें:
- स्थिर पूल: N थ्रेडों की निश्चित संख्या; अतिरिक्त कार्य कतार में जाते हैं
- कैश्ड पूल: माँग के अनुसार बढ़ता है; निष्क्रिय थ्रेड 60 सेकंड बाद समाप्त हो जाते हैं
- एकल थ्रेड: क्रमिक निष्पादन का क्रम सुनिश्चित होता है
- निर्धारित पूल: विलंबित और बार-बार चलने वाले कार्य
- हमेशा shutdown() कॉल करें; स्वच्छ निकास के लिए awaitTermination() का उपयोग करें
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “ExecutorService और Thread Pool के प्रकार” पाठ निःशुल्क है?
हाँ—“ExecutorService और Thread Pool के प्रकार” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“ExecutorService और Thread Pool के प्रकार” में मैं क्या सीखूँगा?
fixed, cached, single और scheduled thread pools बनाएँ तथा समझें कि प्रत्येक का उपयोग कब करना है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“ExecutorService और Thread Pool के प्रकार” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- ExecutorService और Thread Pool के प्रकार
- Tasks Submit करना: Runnable बनाम Callable
- Future और Error Handling
- Recurring Tasks के लिए ScheduledExecutorService