मेरे एंड्रॉइड प्रोजेक्ट में मेरे पास बहुत सारे स्थान थे जहां मुझे कुछ कोड असीमित रूप से चलाने की आवश्यकता है (एक वेब अनुरोध, डीबी आदि को कॉल करें) । यह लंबे समय तक चलने वाले कार्यों (अधिकतम कुछ सेकंड) नहीं है। अब तक मैं एक नया धागा बनाने के साथ इस तरह की चीजें कर रहा था, इसे कार्य के साथ एक नया रननेबल पास कर रहा था। लेकिन हाल ही में मैंने जावा में धागे और समरूपता के बारे में एक लेख पढ़ा है और समझा है कि प्रत्येक कार्य के लिए एक नया थ्रेड बनाना एक अच्छा निर्णय नहीं है।नया थ्रेड (कार्य) .start() एंड्रॉइड में VS ThreadPoolExecutor.submit (कार्य)
तो अब मैंने अपने Application
कक्षा में ThreadPoolExecutor
बनाया है जिसमें 5 धागे हैं।
public class App extends Application {
private ThreadPoolExecutor mPool;
@Override
public void onCreate() {
super.onCreate();
mPool = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);
}
}
और यह भी मैं निष्पादक को Runnable कार्य प्रस्तुत करने के लिए एक विधि है:
public void submitRunnableTask(Runnable task){
if(!mPool.isShutdown() && mPool.getActiveCount() != mPool.getMaximumPoolSize()){
mPool.submit(task);
} else {
new Thread(task).start();
}
}
तो जब मैं अपने कोड में एक अतुल्यकालिक काम चलाना चाहते हैं मैं उदाहरण मिल यहाँ कोड है App
का और submitRunnableTask
पर कॉल करने योग्य विधि को कॉल करें। जैसा कि आप देख सकते हैं, मैं यह भी जांचता हूं कि अगर थ्रेड पूल में मेरे काम को निष्पादित करने के लिए मुफ्त धागे हैं, यदि नहीं, तो मैं एक नया थ्रेड बनाता हूं (मुझे नहीं लगता कि यह होगा, लेकिन किसी भी मामले में ... मैं नहीं करता हूं ' टी मेरे काम को कतार में इंतजार करना और ऐप को धीमा करना चाहते हैं)।
onTerminate
एप्लिकेशन के कॉलबैक विधि में मैंने पूल बंद कर दिया।
तो मेरा प्रश्न निम्न है: क्या कोड में नए थ्रेड बनाने के बाद इस तरह का पैटर्न बेहतर है? मेरे नए दृष्टिकोण के पेशेवर और विपक्ष क्या हैं? क्या इससे समस्याएं पैदा हो सकती हैं जिन्हें मैं अभी तक नहीं जानता हूं? क्या आप मेरे एसिंक्रोनस कार्यों को प्रबंधित करने के लिए मुझसे बेहतर कुछ सलाह दे सकते हैं?
पीएस मेरे पास एंड्रॉइड और जावा में कुछ अनुभव है, लेकिन मैं एक समेकन गुरु होने से बहुत दूर हूं) ऐसे में ऐसे पहलू हो सकते हैं जिन्हें मैं इस तरह के प्रश्नों में अच्छी तरह समझ नहीं पा रहा हूं। किसी भी सलाह की सराहना की जाएगी।
एक थ्रेडपूल प्रत्येक नए कार्य के लिए धागे को बनाने और नष्ट करने के काफी ओवरहेड से बचाता है। साथ ही, यह आपको किसी भी प्रकार की पॉलिसी को नियंत्रित करने की अनुमति देता है कि यह किसी भी क्षण में कितने कार्यकर्ता धागे मौजूद है, बस ऐसा होने की बजाय यह होता है। साथ ही, यह आपको पुन: आविष्कार करने वाली मशीनरी से बचाता है ताकि उन्हें बंद कर दिया जा सके यदि ऐसा कुछ है जो आपके आवेदन को करने की ज़रूरत है। –
मैं कार्य समांतर और डेटा समांतर अनुप्रयोगों दोनों के लिए कई खुली स्रोत परियोजनाओं का प्रबंधन करता हूं। यहां एक लेख है जो एंड्रॉइड के लिए काम करता है: http://coopsoft.com/ar/AndroidArticle.html – edharned
@edharned, बहुत बहुत धन्यवाद, लेकिन मेरी पहली छाप यह है कि आपका ढांचा मेरे मामले के लिए बहुत जटिल है।मुझे बस कुछ छोटे JSON-RPC अनुरोध और कुछ डेटाबेस क्वेरीज़ बनाने की आवश्यकता है। हालांकि मैंने विवरण में आपके ढांचे की जांच नहीं की है, और मेरी पहली छाप गलत हो सकती है। – Andranik