2014-09-06 5 views
5

हमारे आवेदन में, हमारे पास ThreadPoolExecutor एस है। जब एप्लिकेशन निष्क्रिय होता है, तो ThreadPoolExecutor एस भी निष्क्रिय होते हैं, लेकिन एप्लिकेशन में निष्क्रिय धागे की संख्या बहुत अधिक है।क्या थ्रेडपूलएक्सटेक्टर में guarantCoreThreadTimeOut() को सेट करना एक अच्छा अभ्यास है?

थ्रेड डंप में, मुझे पता चला कि अधिकांश धागे ThreadPoolExecutor एस कार्यों के लिए प्रतीक्षा कर रहे हैं। क्या इन कार्यकर्ताओं के धागे को जीवित रखने में कोई दुष्प्रभाव हैं? क्या मुझे setAllowCoreThreadTimeOut()ThreadPoolExecutor में उपयोग करना चाहिए ताकि कार्यकर्ता धागे कुछ समय के लिए निष्क्रिय होने के बाद मर जाए?

उत्तर

3

प्रत्येक थ्रेड में एक संबंधित स्टैक होता है जिसके लिए कुछ मात्रा मेमोरी (कॉन्फ़िगर करने योग्य) की आवश्यकता होती है। यदि आपके धागे प्रतीक्षा स्थिति में हैं (और यदि वे नहीं हैं), तो वे उस स्मृति को आरक्षित कर रहे हैं। इसका उपयोग आपके शेष एप्लिकेशन द्वारा नहीं किया जा सकता है। इसलिए, उन धागे को रोकने के लिए यह समझ में आ सकता है (setAllowCoreThreadTimeout() के साथ), उन्होंने जो मेमोरी आरक्षित की है उसे छोड़ दें, और ThreadPoolExecutor को आवश्यकतानुसार दोबारा बनाएं।

संबंधित मुद्दे