जावा में कॉल करने योग्य इंटरफ़ेस को कैसे लागू करें



यह आलेख आपको विस्तृत और व्यापक ज्ञान प्रदान करेगा कि जावा में Callable Interface को उदाहरणों के साथ कैसे लागू किया जाए।

जावा मल्टीथ्रेडिंग कार्यक्रम व्यापक के उपयोग का गवाह है कॉल करने योग्य और भविष्य। थ्रेड्स और मल्टी-थ्रेडिंग के पूर्व ज्ञान के तहत, पाठक इस लेख में चर्चा को समझने में बेहतर होंगे। जैसा कि मैं इस लेख में जावा में कॉल करने योग्य इंटरफ़ेस की व्याख्या कर रहा हूं।

धागे पर फिर से क्लिक करें

हालाँकि, मुझे केवल थ्रेड्स की अवधारणा का एक संक्षिप्त परिचय देना चाहिए। एक थ्रेड निष्पादन का एक अलग रास्ता है, अगर आपको दोहराए जाने वाले कार्य को करने की आवश्यकता होती है, तो कार्य को कई कार्यों में तोड़ा जा सकता है और उन्हें थ्रेड्स को सौंपा जा सकता है। बहु-थ्रेडिंगपरिणाम को जल्दी से प्राप्त करने के लिए समानांतर में विभिन्न कार्यों को निष्पादित करने के लिए कई थ्रेड असाइन करने के अलावा कुछ भी नहीं है।





Java में Callable Interface क्या है

जावा 5 के लिए, वर्ग 'java.util.concurrent' पेश किया गया था। इस कॉल करने योग्य इंटरफ़ेस को संगामिति पैकेज के माध्यम से लाया गया था जो कि रननेबल इंटरफ़ेस के समान था। यह किसी भी वस्तु को वापस कर सकता है और एक अपवाद को फेंकने में सक्षम है। एक जावा कॉल करने योग्य इंटरफ़ेस जेनरिक का उपयोग करता है, इस प्रकार किसी भी प्रकार की वस्तु को वापस करना संभव बनाता है। एक्ज़ीक्यूटर फ्रेमवर्क थ्रेड के पूल में कॉल करने योग्य कार्यान्वयन को निष्पादित करने के लिए एक सबमिट () विधि देता है। वास्तव में, Java एक्जिक्यूटर फ्रेमवर्क वर्कर पैटर्न में पालन करता है।

java-interfaceएक थ्रेड पूल में उपयोगकर्ता Executors.newFixedThreadPool (10) विधि का उपयोग करके थ्रेड आरंभ कर सकते हैं और तदनुसार एक कार्य सबमिट कर सकते हैं। एक रनवेबल एक थ्रेड के लक्ष्य के रूप में कार्य करता है और एक सार्वजनिक शून्य रन () विधि कार्य को परिभाषित करने के लिए अनिवार्य रूप से लागू की जाती है। यह थ्रेड पूल में थ्रेड्स द्वारा निष्पादित किया जाएगा। पूल में थ्रेड्स की उपलब्धता के आधार पर, एक्ज़ीक्यूटर फ्रेमवर्क थ्रेड्स को कार्य (रन करने योग्य लक्ष्य) प्रदान करता है।यदि सभी थ्रेड्स उपयोग में हैं, तो कार्य को रोकना होगा। थ्रेड एक कार्य पूरा करने के बाद फिर उपलब्ध थ्रेड के रूप में पूल में लौटता है, जो भविष्य के कार्यों को स्वीकार करने के लिए तैयार है। कॉल करने योग्य रननेबल के समान है और जब हम कार्य से परिणाम या स्थिति प्राप्त करना चाहते हैं तो किसी भी प्रकार की वस्तु को वापस कर सकते हैं।



कॉल करने योग्य इंटरफ़ेस की वापसी

जावा कॉल करने योग्य java.util.concurrent रिटर्न देता है। जावा फ्यूचर संबंधित कॉल करने योग्य कार्य को समाप्त करने के लिए एक रद्द () विधि प्रदान करता है। यह प्राप्त () विधि का एक अतिभारित संस्करण है, जहां कोई परिणाम के लिए प्रतीक्षा करने के लिए एक निश्चित समय निर्दिष्ट कर सकता है। वर्तमान थ्रेड से बचने के लिए यह उपयोगी है, जो लंबी अवधि के लिए अवरुद्ध हो सकता है। कृपया याद रखें कि प्राप्त विधि एक तुल्यकालिक विधि है और जब तक कॉल करने योग्य अपना कार्य पूरा नहीं करता है और एक मूल्य लौटाता है, तब तक उसे कॉल करने योग्य इंतजार करना होगा।

संबद्ध कॉल करने योग्य कार्य की वर्तमान स्थिति लाने के लिए 'DDone () 'और 'Cancelled ()' विधियाँ भी हैं। उस उदाहरण पर विचार करें जहां एक से 100 तक की सभी संख्याओं का योग पाया जाना है। हम क्रमिक रूप से 1 से 100 तक लूप कर सकते हैं और अंत में उन्हें जोड़ सकते हैं। एक और संभावना विभाजन और विजय के द्वारा है। इस पद्धति में, हम संख्याओं को इस तरह से समूहित कर सकते हैं जैसे कि प्रत्येक समूह में दो तत्व हों। अंत में, हम उस समूह को थ्रेड्स के पूल में असाइन कर सकते हैं। इसलिए, प्रत्येक थ्रेड समानांतर में एक आंशिक राशि लौटाता है और फिर उन आंशिक रकमों को इकट्ठा करता है और उन्हें पूरी राशि प्राप्त करने के लिए जोड़ देता है।



जावा में स्ट्रिंग

कॉल करने योग्य और भविष्य वर्ग की विशेषताएं

  • कॉल करने योग्य वर्ग एक एसएएम प्रकार का इंटरफ़ेस है और इसलिए इसे लंबोदर अभिव्यक्ति में लागू किया जा सकता है।

  • कॉल करने योग्य वर्ग में एक ही विधि है 'कॉल ()' जो असंगत रूप से निष्पादित करने के लिए आवश्यक सभी कोड रखती है।

  • एक रनवेबल इंटरफ़ेस वातावरण में, गणना या फेंक दिए गए अपवाद के परिणाम को वापस करने की कोई संभावना नहीं थी। जबकि कॉल करने योग्य मूल्य वापस करने और एक चेक किए गए अपवाद को फेंकने के लिए उपलब्ध है।

  • एक बार गणना करने के बाद परिणाम प्राप्त करने के लिए फ्यूचर क्लास की विधि प्राप्त करें। उपयोगकर्ता यह भी जांच सकते हैं कि गणना की गई () विधि का उपयोग करके गणना समाप्त हो गई है या नहीं।

  • Future.cancel () पद्धति का उपयोग करके गणना रद्द करना कुछ अनुप्रयोगों में एक वरदान भी है।

  • प्राप्त करें () को एक अवरुद्ध कॉल कहा जाता है और यह गणना पूरी होने तक ब्लॉक करना जारी रखता है।

Callable और Runnable Classes की तुलना

कॉल करने योग्य चलाने योग्य
यह 'का हिस्सा है java.util.concurrent ' जावा 1.5 से पैकेजयह जावा 1.0 के बाद से java.lang पैकेज का हिस्सा है
एक पैरामीटर इंटरफ़ेस, जैसे कि कॉल करने योग्यएक गैर-पैरामीटरित इंटरफ़ेस
चेक किए गए अपवाद को फेंकने में सक्षमयह एक जाँच अपवाद को फेंक नहीं सकता है
इसमें एक एकल विधि, कॉल () शामिल है, जो टाइप V देता है, यह परिभाषित इंटरफ़ेस पैरामीटर 'टाइप' के समान है।यहां, इसमें एक एकल विधि शामिल है, जिसे रन कहा जाता है (), जो शून्य देता है

नीचे जावा कॉल करने योग्य वर्ग का एक सरल उदाहरण लागू किया गया है जहां कोड विशिष्ट थ्रेड का नाम देता है, जो एक सेकंड के बाद कार्य को निष्पादित कर रहा है। यहाँ हम एक्सट्रैक्टर फ्रेमवर्क का उपयोग प्रस्तुत किए गए कार्यों के परिणाम के लिए जावा फ्यूचर के समानांतर 100 कार्यों को निष्पादित करने के लिए करते हैं। पहला स्निपेट आउटपुट है और नीचे कोड का प्रतिनिधित्व करता है।

पैकेज com.journaldev.threads आयात java.util.ArrayList आयात java.util.Date आयात java.util.List आयात java.util.concurrent.allable आयात java.util.concurrent.ExecutionException आयात java.util.concurrent.ExecutorService आयात सेवा java.util आयात करता है। .util.concurrent.Executors आयात java.util.concurrent.Future सार्वजनिक वर्ग MyCallable लागू करता है कॉल करने योग्य {@Override सार्वजनिक स्ट्रिंग कॉल () थ्रेड अपवाद {थ्रेड। स्लीप (1000) // इस कॉल योग्य कार्य को निष्पादित करने वाले थ्रेड का नाम वापस करें। । कॉल करने योग्य सूची से जुड़ी वस्तुlist = नया ArrayList() // MyCallable उदाहरण बनाएँ Callable callable = new MyCallable () for (int i = 0 i)<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

शट डाउन एग्जीकटर सर्विसेज

कई डेवलपर्स को जो महत्वपूर्ण और महत्वपूर्ण पहलू याद आ रहा है, वह एक्सक्लूसिव सर्विस को बंद कर रहा है। ExecutorService महत्वपूर्ण है और अतिरिक्त थ्रेड तत्वों के साथ बनाई गई है। ध्यान रखें कि JVM तभी रुकता है जब सभी गैर-डीमन धागे बंद हो जाते हैं। इस प्रकार बस निष्पादक सेवा को बंद करने से जेवीएम बंद हो जाता है।

निष्पादक सेवा को यह बताने के लिए कि थ्रेड को चलाने की कोई आवश्यकता नहीं है, हमें सेवा बंद कर देनी चाहिए।

शटडाउन आह्वान करने के तीन तरीके हैं:

  • शून्य बंद () - यह एक अर्दली शटडाउन शुरू करता है जिसमें पहले सबमिट किए गए कार्यों को निष्पादित किया जाता है, लेकिन कोई नया कार्य स्वीकार नहीं किया जाता है।
  • सूची बंद करें - यह सभी सक्रिय रूप से निष्पादित कार्यों को रोकने का प्रयास करता है, लंबित कार्यों के प्रसंस्करण को रोकता है, और उन कार्यों की सूची भी देता है जो निष्पादन का इंतजार कर रहे थे।
  • शून्य प्रतीक्षा () - यह तब तक ब्लॉक होना जारी रहता है जब तक कि शटडाउन अनुरोध के बाद सभी कार्यों का निष्पादन समाप्त नहीं हो जाता, या समय समाप्त हो जाता है। वर्तमान थ्रेड बाधित होने पर भी यह ब्लॉक हो जाता है। सभी निर्भर करता है कि कौन सा कार्य पहले आता है।

इसके साथ, हम जावा लेख में कॉल करने योग्य इंटरफ़ेस के अंत में आते हैं। मुझे उम्मीद है कि आपको जावा में Future and Callable Interface की समझ मिल गई होगी।

इसकी जाँच पड़ताल करो 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का का जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किया गया है जो जावा डेवलपर बनना चाहते हैं।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इसे 'जावा में कॉल करने योग्य इंटरफ़ेस' ब्लॉग के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।