java.util.concurrent - Understanding java executor service shutdown and awaitTermination -
निम्न व्यवहार को स्पष्ट करने की आवश्यकता है
मेरे पास java.util.concurrent.ExecutorService
के साथ एक जावा ऐप है,
के लिए (int i = 0; i & lt; धागा_ग्रेड; i ++) {रननबल वर्कर = नया मैथ्रेड (बैच सिज़); executor.execute (कार्यकर्ता); } Executor.shutdown (); निष्पादक। प्रवेश परीक्षा (15, टाइम यूनिट। एमआईएनयूटीईएस); System.out.println ("सभी धागे समाप्त हो गए हैं");
उपरोक्त कोड में मेरे पास 5 धागे हैं और ये 10 मिनट में समाप्त होते हैं और यह System.out.println ("सभी थ्रेड समाप्त हो चुके हैं") निष्पादित करेगा
, यहां तक कि हालांकि निष्पादक। इंतजार कर रहा है (15, टाइम यूनेट। एमआईएनटीईएस)
15 मिनट प्रतीक्षा समय है।
लेकिन जब मैं executor.shutdown ()
को हटा देता हूं प्रोग्राम 15 मिनट का इंतजार करेगा जो कि अगले लाइन को निष्पादित करने से पहले निष्पादक.वाइटटिमिनेशन (15, टाइम यूनेट। एमआईएनटीईएस)
स्टेटमेंट में निर्दिष्ट है।
क्या कोई इस व्यवहार को समझा सकता है? बिना किसी शटडाउन कमान का समय निर्धारित राशि तक इंतजार करना चाहिए, हालांकि सभी धागे समाप्त हो गए हैं?
Javadoc for says :
जब तक कि सभी कार्यों को बंद करने के अनुरोध के बाद निष्पादन पूरा नहीं किया जाता है, या समय समाप्त होने पर या मौजूदा थ्रेड बाधित है, जो भी पहले होता है मजबूत>।
इसलिए जब आप शटडाउन () कॉल करते हैं: आपके धागे 10 मिनट में समाप्त होते हैं
लेकिन अगर आप शट डाउन () को कॉल निकालते हैं, तो कोई शटडाउन अनुरोध नहीं है, इसलिए इंतजार करें जब तक टाइमआउट गुजरता नहीं होता तब तक वापसी नहीं होती (15 मिनट)
Comments
Post a Comment