एंड्रॉइड पर एक ही नियम सामान्य जावा वातावरण में लागू होते हैं। जावा धागे में नहीं मारा जाता है, लेकिन धागे को रोकना सहकारी तरीके में किया जाता है। थ्रेड को समाप्त करने के लिए कहा जाता है और थ्रेड फिर से बंद कर सकते हैं।
अक्सर volatile boolean
फ़ील्ड का उपयोग किया जाता है जो थ्रेड समय-समय पर जांचता है और जब यह इसी मान पर सेट होता है तो समाप्त हो जाता है।
मैं कि क्या धागा समाप्त करना चाहिए की जांच करने के लिए एक boolean
का उपयोग नहीं होता। यदि आप फ़ील्ड संशोधक के रूप में volatile
का उपयोग करते हैं, तो यह विश्वसनीय काम करेगा, लेकिन यदि आपका कोड अधिक जटिल हो जाता है, तो while
लूप के अंदर अन्य अवरोधन विधियों का उपयोग करने के लिए, यह हो सकता है कि आपका कोड को कम से कम या कम से कम समाप्त नहीं करेगा जितना चाहें उतना लेता है।
कुछ अवरुद्ध लाइब्रेरी विधियां बाधा का समर्थन करती हैं।
हर धागा पहले से ही एक बूलियन ध्वज बाधित स्थिति है और आप इसे का उपयोग करना चाहिए। इसे इस तरह कार्यान्वित किया जा सकता है:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
// ...
}
} catch (InterruptedException consumed)
/* Allow thread to exit */
}
}
public void cancel() { interrupt(); }
स्रोत कोड Java Concurrency in Practice से लिया गया। चूंकि cancel()
विधि सार्वजनिक है, इसलिए आप इस विधि को इस विधि को लागू करने दे सकते हैं।
एक खराब नामित स्थिर विधि interrupted
भी है जो वर्तमान धागे की बाधित स्थिति को साफ़ करता है।
स्रोत
2014-05-20 10:54:25
AsyncTask वास्तव में बाधा तंत्र के लिए एक विकल्प नहीं है, यह यूआई के साथ बातचीत करने के लिए एक और साधन है। जैसा कि मैंने अपने उत्तर में बताया है, अगर आपको निष्पादन के दौरान इसे रोकने में सक्षम होना चाहते हैं, तो आपको अभी भी AsyncTask में एक ही सामान्य थ्रेड में उसी तंत्र को लागू करना होगा। – Malcolm