2010-06-28 17 views

उत्तर

12

आपको लगता है कि इसी तरह के अर्थ विज्ञान के साथ कुछ अन्य तरीके मौजूद हैं बुला Thread.interrupt()

नोट से, धागा बाधित करने के लिए पूछ सकते हैं - stop() और destroy() - लेकिन वे कर रहे हैं पदावनत , क्योंकि वे unsafe हैं। उनका उपयोग करने के लिए लुभाने मत बनो।

+1

। नष्ट() को वंचित नहीं किया गया है। – JavaUser

+1

बोझो के "असुरक्षित" लिंक को देखें, विशेष रूप से "थ्रेड.स्टॉप()" अनुभाग के बजाय मुझे क्या उपयोग करना चाहिए, ताकि * थ्रेड * को मारने के लिए कैननिकल तरीके को देखा जा सके। इंटरप्ट केवल मौजूदा चलने वाले ब्लॉकिंग कॉल को चलने से रोकने का कारण बनता है, लेकिन खुद को थ्रेड को निष्पादित करने से रोक नहीं पाएगा। –

+2

@JavaUser यह जावा 1.5 – Bozho

6

बोझो ने कहा, Thread.interrupt() इसे करने का सामान्य और सही तरीका है। लेकिन याद रखें कि इसे धागे को सहयोग करने की आवश्यकता है; एक थ्रेड को लागू करना बहुत आसान है जो बाधा अनुरोधों को अनदेखा करता है।

कोड के एक टुकड़े को इस तरह से बाधित करने के लिए, इसे किसी भी इंटरप्टेड अपवाद को अनदेखा नहीं करना चाहिए, और इसे प्रत्येक लूप पुनरावृत्ति (थ्रेड.currentThread() का उपयोग करके अवरोध ध्वज की जांच करनी चाहिए। अंतर्निहित() है। इसके अलावा, इसमें कोई भी गैर-अवरोधक अवरोधन संचालन नहीं होना चाहिए। यदि ऐसे परिचालन मौजूद हैं (उदा। सॉकेट पर प्रतीक्षा करना), तो आपको अधिक विशिष्ट बाधा कार्यान्वयन की आवश्यकता होगी (उदाहरण के लिए सॉकेट बंद करना)।

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