वहाँ
ExecutorService e=Executors.newSingleThreadExecutor();
e.execute(callable)
e.shutdown()
का उपयोग करने से किसी भी कीमत दंड है की तुलना में:
new Thread(runnable).start()
हाँ, वहाँ एक "दंड" है: ExecutorService
सबसे अधिक संभावना होगा बनाने के लिए और अधिक महंगा हो क्योंकि यह आपके द्वारा सबमिट किए जा रहे कार्यों के लिए कतार भी बनाता है और यदि कोई वें पढ़ना बंद करने से पहले विफल रहता है, फिर किसी भी बाद के कार्यों को चलाने के लिए असफल थ्रेड को दूसरे के साथ बदल दिया जाएगा (इसलिए वहां काफी तर्क है)। हालांकि, आप संभवतः एक कार्य चलाने के लिए ExecutiveService
बनाना नहीं चाहते हैं ... शायद यह ExecutorService
(अगले प्रश्न में उस पर अधिक) का सबसे अच्छा उपयोग नहीं है।
यदि कोई कॉल करने योग्य लंबा नहीं है, और कभी भी एक से अधिक उदाहरण नहीं चल रहे हैं तो यह -1- से कोड का उपयोग करना ठीक है? या निष्पादक सेवा को स्थिर के रूप में रखना और कॉल के बीच पुन: उपयोग करना सबसे अच्छा है?
ExecutorService
का सुझाव दिया उपयोग एक धागा पूल, जहां ExecutorService
के आसपास रखने के रूप में है और आप जब तक आप प्रस्तुत करने के लिए कार्य किया है के रूप में यह करने के लिए प्रस्तुत करने के कार्यों को रखने के लिए। यह स्थैतिक या सिर्फ एक नियमित सदस्य हो सकता है, जो आपकी आवश्यकताओं/डिजाइन पर अप्रासंगिक और अत्यधिक निर्भर है। भले ही आप एक समय में केवल एक उदाहरण चला रहे हों (यानी आपके पास केवल एक थ्रेडेड एक्जिक्यूटर है), यह ExecutorService
का उपयोग करने के लिए अभी भी अधिक कुशल है क्योंकि यह थ्रेड का पुन: उपयोग करता है, इसलिए लंबे समय तक यह बनाने से कम महंगा होगा आपके द्वारा सबमिट किए गए प्रत्येक कार्य के लिए एक नया धागा।
यदि मेरे पास कई कार्य हैं ... क्या प्रत्येक कार्य के लिए उनके कार्यकर्ता सेवा के लिए कोई समस्या है या केंद्रीकृत एक बेहतर है?
कोई समस्या नहीं है, लेकिन यह अक्षम है, इसलिए केवल एक केंद्रीकृत निष्पादक सेवा है।
यदि कोई शट डाउन नहीं है तो क्या कोई एक्जिक्यूटर्स खपत करता है?
मुझे नहीं लगता कि आप उस विशेष रूप से के बारे में चिंता है, खासकर यदि आप सही संदर्भ में Executor
उपयोग कर रहे हैं यह कम से कम हो जाएगा चाहिए।