ExecutorService, ScheduledExecutorService Java In Hindi
जावा प्रोग्रामिंग लैंग्वेज में मल्टीथ्रेडेड प्रोग्रामिंग टास्क कांसेप्ट को इजी करने के लिए java.util.concurrent पैकेज जावा डेवलपर को Executor Framework एक अतरिक्त टूल्स या पैकेज लाइब्रेरी के रूप में प्रोवाइड करता है।

जिसमे जावा डेवलपर को हर नए थ्रेड टास्क डिज़ाइन डेवलपमेंट के लिए मैन्युअल रूप से एक कस्टम यूजर बेस्ड नया Thread टास्क क्रिएट करने के बदले, जावा यूजर मौजूदा क्रिएटेड थ्रेड्स के पूल को मैनेज या कण्ट्रोल करने और थ्रेड टास्क को एक्ज़ीक्यूट करने के लिए एक्ज़ीक्यूटर सर्विसेज का यूज़ कर सकता हैं।
There are two essential Executor Framework interfaces in the Java programming language.
- ExecutorService – जावा प्रोग्राम में एसिंक्रोनस थ्रेड टास्क को एक्ज़ीक्यूट और मैनेज करने में इसका यूज़ किया जाता है।
- ScheduledExecutorService – इसे मौजूदा जावा थ्रेड टास्क को डिले या बार-बार एक फिक्स्ड टाइम पर एक्ज़ीक्यूट करने में यूज़ किया जाता है।
ExecutorService in Java Thread Concept.
जावा प्रोग्राम में ExecutorService एक java.util.concurrent पैकेज इंटरफ़ेस है, जो यूजर क्रिएटेड थ्रेड्स टास्क के पूल का यूज़ करके कई थ्रेड टास्क को मैनेज और एक्ज़ीक्यूट करने का एक बेस्ट मेथड प्रोवाइड करता है।
Instead of writing it like this.
SimpleThread tsk1 = new SimpleThread(task1);
SimpleThread tsk2 = new SimpleThread(task2);
SimpleThread tsk3 = new Thread(task3);
tsk1.start();
tsk2.start();
tsk3.start();
इससे जावा यूजर एक थ्रेड टास्क पूल क्रिएट कर सकते हैं.
ExecutorService executor = Executors.newFixedThreadPool(3);
और उसमें जरूरत के अनुसार टास्क को सबमिट कर सकते हैं।
जहा थ्रेड एग्जीक्यूटर अवेलेबल थ्रेड्स को टास्क असाइन करने पर फोकस रखता है।
A basic example of a Java thread ExecutorService.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
ExecutorService executor =
Executors.newFixedThreadPool(3);
executor.execute(() -> {
System.out.println(“Thread Task 1 is still continuing”);
});
executor.execute(() -> {
System.out.println(“Thread Task 2 is still continuing”);
});
executor.execute(() -> {
System.out.println(“Thread Task 3 is still continuing”);
});
executor.shutdown();
}
}
Explanation of Java thread ExecutorService.
Executors.newFixedThreadPool(3)
यह मौजूदा थ्रेड टास्क में एक 3 वर्कर थ्रेड वाला एक पूल क्रिएट करता है।
इसके बाद.
executor.execute(task);
इसके बाद एग्जीक्यूशन के लिए एक टास्क को सबमिट करता है।
जब इस प्रोसेस में सभी एसेंशियल थ्रेड टास्क प्रॉपर आर्डर में सबमिट हो जाते हैं, तो इसके बाद हमें एग्जीक्यूटर को प्रॉपर क्लोज कर देना चाहिए।
executor.shutdown();
यह सर्विस एग्जीक्यूटर को इंडीकेट करता है कि अब कोई नया थ्रेड टास्क को एक्सेप्ट नहीं किया जाएगा, जबकि इस प्रोसेस के दौरान पहले से सबमिट किए गए थ्रेड टास्क टर्मिनेट हो सकते हैं।
Why use ExecutorService in Java threads?
जावा थ्रेड टास्क में ExecutorService पैकेज लाइब्रेरी के यूज़ करने के कई सारे एडवांटेज हैं।
Reusing multiple threads.
जिसमे हर एक नए टास्क के लिए एक नया थ्रेड क्रिएट करने के बदले, मौजूदा वर्कर थ्रेड कई टास्क को वन बाय वन एग्जीक्यूट कर सकते हैं।
थ्रेड टास्क 1 ──┐
थ्रेड टास्क 2 ──┼──> थ्रेड पूल
थ्रेड टास्क 3 ──┘
↓
वर्कर थ्रेड्स
Better Resource Management.
एक प्रोग्राम में बहुत ज़्यादा थ्रेड्स टास्क क्रिएट करने से आपके मौजूदा सिस्टम के काफ़ी रिसोर्स यूज़ हो सकते हैं। इसी समय थ्रेड पूल हमें एक साथ रन होने वाले वर्कर थ्रेड्स के नंबर्स को कंट्रोल करने में हेल्प करता है।
Better Thread Task Management.
इसमें थ्रेड टास्क एग्जीक्यूटर इनके लिए आपको ये मेथड प्रोवाइड करता है.
- थ्रेड टास्क को सबमिट करना
- आउटपुट रिज़ल्ट प्रोवाइड करना
- थ्रेड टास्क एग्जीक्यूशन प्रोसेस को क्लोज करना
- एक साथ एक से कई थ्रेड टास्क को मैनेज करना
execute() method concept in Java threads.
जावा थ्रेड टास्क में execute() फंक्शन मेथड का यूज़ तब किया जाता है, जब जावा यूजर को रिटर्न वैल्यू की आवश्यकता नहीं होती है।
executor.execute(() -> {
System.out.println(“Welcome to Vcanhelpsu”);
});
यह फंक्शन यूजर जनरेटेड थ्रेड टास्क को एसिंक्रोनस एग्जीक्यूशन के लिए सबमिट करता है।
submit() method concept in Java threads.
जावा थ्रेड टास्क में submit() फंक्शन मेथड का यूज़ तब किया जा सकता है, जब जावा यूजर कोई रिज़ल्ट अचीव करना चाहते हैं, या थ्रेड टास्क कम्पलीट होने को ट्रैक करना चाहते हैं।
यह आपको एक फ्यूचर इनफार्मेशन वैल्यू को रिटर्न करता है।
Example of the submit() method concept.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executor =
Executors.newFixedThreadPool(2);
Future<Integer> output = executor.submit(() -> {
return 7 * 5;
});
try {
System.out.println(output.get());
} catch (InterruptedException | ExecutionException ex) {
ex.printStackTrace();
}
executor.shutdown();
}
}
Program output.
35
In this.
Future<Integer> output
यह वह रिजल्ट डिस्प्ले करता है, जो इसमें थ्रेड टास्क पूरा होने के बाद आपको मिलेगा।
Common types of ExecutorService in Java threads.
जावा यूजर को Executors क्लास कई थ्रेड डिज़ाइन डेवलपमेंट के लिए एक फ़ैक्टरी मेथड प्रोवाइड करता है।
Fixed Java thread pool.
ExecutorService executor =
Executors.newFixedThreadPool(3);
यह मौजूदा प्रोग्राम में एक फिक्स्ड नंबर के वर्कर थ्रेड्स वाला एक पूल क्रिएट करता है।
Single Java thread Executor.
ExecutorService executor =
Executors.newSingleThreadExecutor();
यह जावा में थ्रेड टास्क को एक के बाद एक एग्जीक्यूट करने के लिए एक वर्कर थ्रेड का यूज़ करता है।
Cached thread pool concept.
ExecutorService executor =
Executors.newCachedThreadPool();
यह मौजूदा प्रोग्राम में सबमिट किए गए वर्कलोड के हिसाब से थ्रेड्स को डायनामिकली क्रिएट/ या दोबारा यूज़ करता है।
मॉडर्न जावा एप्लिकेशन्स के लिए, जावा यूजर के द्वारा एग्जीक्यूटर का सलेक्शन वर्कलोड और लाइफसाइकल की ज़रूरतों के आधार पर होना चाहिए, न कि सिर्फ़ डिफ़ॉल्ट रूप से फ़ैक्टरी मेथड का यूज़ करने के आधार पर इसे किया जाना चाहिए।
ScheduledExecutorService concept in Java threads.
जावा थ्रेड टास्क में ScheduledExecutorService एक स्पेसिफिक स्पेशल एग्जीक्यूटर मेथड है, जिसका जावा थ्रेड में तब यूज़ किया जाता है. जब आपको थ्रेड टास्क को कम्पलीट करने की ज़रूरत होती है.
- एक फिक्स्ड टाइम के बाद
- या जरूरत पड़ने या समय-समय पर
- एक फिक्स्ड रेट पर
- थ्रेड टास्क एक्जीक्यूशन के बीच एक फिक्स्ड टाइम डिले के साथ
It extends the ExecutorService in Java thread tasks.
java thread ExecutorService
↑
|
ScheduledExecutorService
यह इसमें उपलब्ध पैकेज लाइब्रेरी है.
java.util.concurrent
Scheduling a Java thread task after a delay.
जावा यूजर अपने थ्रेड टास्क मेथड में इसका यूज़ कर सकते हैं.
schedule()
Example of ScheduledExecutorService in a Java thread.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> {
System.out.println(“Here this Task run after 4 seconds”);
}, 4, TimeUnit.SECONDS);
scheduler.shutdown();
}
}
यहाँ इस प्रोग्राम में थ्रेड टास्क शेड्यूल होने के लगभग 4 सेकंड के बाद रन होता है।
scheduleAtFixedRate() function in Java threads.
जावा थ्रेड टास्क प्रोग्राम में यह मेथड एक टास्क को एक फिक्स्ड रेट पर बार-बार कम्पलीट करता है।
Example of the scheduleAtFixedRate() function.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(() -> {
System.out.println(“User Created Thread Task executed”);
}, 0, 3, TimeUnit.SECONDS);
}
}
The arguments in this example are.
शुरुआती यूजर डिफाइन 3 सेकंड की देरी
↓
0
↓
पीरियड
↓
3 सेकंड के बाद आउटपुट
यहाँ इस प्रोग्राम में थ्रेड टास्क में स्टार्ट में 0 सेकंड की डिले होती है, और फिर फिक्स्ड-रेट शेड्यूलिंग रूल्स के अनुसार हर 3 सेकंड में इन टास्क इन्फो को शेड्यूल किया जाता है।
scheduleWithFixedDelay() function in Java threads.
यह मेथड जावा थ्रेड में किसी टास्क के टर्मिनेट होने का वेट करता है, फिर उसे दोबारा स्टार्ट करने से पहले से इंडीकेट की गई डिले का वेट करता है।
scheduler.scheduleWithFixedDelay(
() -> {
System.out.println(“User Define Thread Task executed”);
},
0,
3,
TimeUnit.SECONDS
);
यहाँ इसमें डिले होने का अंतर बहुत ज़रूरी है।
Java thread fixed rate difference.
स्टार्ट → 3 सेकंड → स्टार्ट → 3 सेकंड → स्टार्ट
यहाँ जावा यूजर का पर्पस एक रेगुलर टास्क के शेड्यूल को बनाए रखना है। यूजर डिफाइन एक फिक्स्ड वेट डिले के बाद.
स्टार्ट → फिनिश → 3 सेकंड → स्टार्ट → फिनिश → 3 सेकंड → स्टार्ट
इसमें हर थ्रेड टास्क में डिले को पिछले एग्जीक्यूशन के टर्मिनेट होने के बाद कैलकुलेट जाता है।
Detail Explanation of ExecutorService vs ScheduledExecutorService in java thread
| # | Executorservice java thread task package | Scheduledexecutorservice java thread task package |
| 1. | Executorservice used to executes all user submitted thread tasks | Scheduledexecutorservice used to executes scheduled thread tasks |
| 2. | Executorservice package used for normal asynchronous thread task execution | Scheduledexecutorservice package used for delayed/periodic thread task execution |
| 3. | Executorservice package full supports execute() and submit() function method | Scheduledexecutorservice package also provides java use a scheduling function method |
| 4. | Executorservice does not provide you a scheduling method for itself | Scheduledexecutorservice supports schedule() function thread task method |
| 5. | Executorservice package suitable for general thread task execution process | Scheduledexecutorservice method suitable for timers and recurring thread tasks method |
| 6. | Executorservice example: it processes 70 independent jobs given by system | Scheduledexecutorservice example: run a thread task every 7 minutes |
Essential steps in a Java Executor Framework thread.
ExecutorService methods.
execute() फंक्शन मेथड।
submit() फंक्शन मेथड।
shutdown() फंक्शन मेथड।
shutdownNow() फंक्शन मेथड।
isShutdown() फंक्शन मेथड।
isTerminated() फंक्शन मेथड।
ScheduledExecutorService
इसमें एग्जीक्यूटर थ्रेड टास्क तरीकों के अलावा आपको कई जरूरी फंक्शन मिलते है।
schedule() फंक्शन मेथड।
scheduleAtFixedRate() फंक्शन मेथड।
scheduleWithFixedDelay() फंक्शन मेथड।
shutdown() vs. shutdownNow() function methods in a Java thread.
shutdown() function method.
executor.shutdown(); function method.
यह जावा थ्रेड में एक नए टास्क को सबमिट होने से स्टॉप करता है, लेकिन यह पहले से सबमिट किए गए थ्रेड टास्क को कम्पलीट होने देता है।
shutdownNow().
executor.shutdownNow(); function method
यह मौजूदा प्रोग्राम में अभी चल रहे थ्रेड टास्क को स्टॉप करने की कोशिश करता है, और उन थ्रेड टास्क को रिटर्न करता है, जो थ्रेड एग्जीक्यूशन प्रोसेस में वेट कर रहे थे। थ्रेड टास्क रुकावट मिलकर काम करती है, इस वजह से चल रहा थ्रेड टास्क इमीडियेट क्लोज नहीं हो सकता है।
A simple example of a Java thread task in real life.
तो चलिए यहाँ हम एक कंपनी आर्गेनाइजेशन के बारे में कल्पना करे।
ExecutorService Java Thread Method Concept Explained.
जैसे एक कंपनी आर्गेनाइजेशन में 7 एम्प्लॉई अलग अलग कंपनी टास्क कर रहे हैं।
Thread Task 1 ──→ Allotted to Employee 1
Thread Task 2 ──→ Allotted to Employee 2
Thread Task 3 ──→ Allotted to Employee 3
Thread Task 4 ──→ Allotted to Employee 4
Thread Task 5 ──→ Allotted to Employee 5
Thread Task 6 ──→ Allotted to Employee 6
Thread Task 7 ──→ Allotted to Employee 7
इस प्रोसेस में जब कोई कंपनी एम्प्लॉई किसी टास्क को टर्मिनेट या फिनिश कर लेता है, तो वह एम्प्लॉई कोई अन्य दूसरा टास्क एक्सेप्ट कर सकता है।
ScheduledExecutorService concept.
अब जावा यूजर एक ऐसे टास्क के बारे में सोचें, जो एक स्पेशल टाइम पर कम्पलीट होना चाहिए।
टास्क रिपोर्ट को भेजें
↓
7 मिनट का इंतज़ार करें
↓
टास्क रिपोर्ट को भेजें
↓
7 मिनट का इंतज़ार करें
↓
टास्क रिपोर्ट को भेजें
यहाँ इस एक्साम्प्ल में एक ScheduledExecutorService को कुछ इसी तरह के थ्रेड टास्क के लिए डिज़ाइन डेवलप किया गया है।
Conclusion of ExecutorService, ScheduledExecutorService Java Thread.
जावा थ्रेड टास्क प्रोग्राम को इजी करने के लिए ExecutorService, Java के java.util.concurrent पैकेज में एक इंटरफ़ेस प्रोवाइड करता है. जो थ्रेड्स टास्क के पूल का यूज़ करके मल्टीप्ल थ्रेड टास्क को मैनेज और एक्ज़ीक्यूट करने के लिए एक फ्रेमवर्क प्रोवाइड करता है। यह कांसेप्ट जावा यूजर को अलग-अलग थ्रेड्स टास्क को मैन्युअल रूप से क्रिएट करने और मैनेज करने की ज़रूरत को कम करता है। थ्रेड टास्क को execute() फंक्शन और submit() फंक्शन जैसे मेथड का यूज़ करके सबमिट किया जा सकता है, और एक्ज़ीक्यूटर को shut down() फंक्शन मेथड का यूज़ करके क्लोज किया जा सकता है।
जावा थ्रेड के लिए ScheduledExecutorService, ExecutorService का एक पॉपुलर एक्सटेंशन है, जिसका यूज़ एक फिक्स्ड टाइम डिले के बाद या फिक्स्ड समय पर बार-बार किसी थ्रेड टास्क को एक्ज़ीक्यूट करने के लिए किया जाता है। यह जावा यूजर को schedule(), scheduleAtFixedRate(), और scheduleWithFixedDelay() जैसे फंक्शन या मेथड प्रोवाइड करता है।
Easy way to remember ExecutorService in Java thread tasks.
- ExecutorService → यह जावा थ्रेड पैकेज लाइब्रेरी में “मेरे टास्क चलाएँ।” को रन करता है.
- ScheduledExecutorService → यह जावा थ्रेड पैकेज लाइब्रेरी में “मेरे टास्क बाद में या बार-बार चलाएँ।” या रन करता है.

