2011-03-07 25 views
5

Thread.stop() इतना खतरनाक क्यों है?Thread.stop() इतना खतरनाक क्यों है

इसके बजाय Thread.interrupted() का उपयोग करने की सलाह क्यों दी जाती है?

मुझे पता है stop बहिष्कृत है। क्या दूसरी चीज इसे असुरक्षित बनाती है?

क्या कोई ऐसी जगह है जहां मैं stop विधि का उपयोग कर सकता हूं? यदि ऐसा है तो मुझे एक उदाहरण दें।

+10

क्या आपने http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html को थ्रेड.स्टॉप javadocs से लिंक किया था? –

+0

+1, मेरा दिमाग ऊपर था जब मेरा दिमाग किसी पर विचार नहीं कर रहा था :) – adarshr

+0

यह आलेख सहायक हो सकता है: [आप इंटरप्टेड एक्सेप्शन के साथ क्या करते हैं?] (Http://www.yegor256.com/2015/10/20/ interrupted-upgrade.html) – yegor256

उत्तर

8

Thread.stop() इतना खतरनाक क्यों है? http://download.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

यह सलाह दी जाती Thread.interrupted उपयोग करने के लिए क्यों किया जाता है() के बजाय:

समस्याओं यहाँ विस्तार से वर्णन किया जाता है?

जब यह एक बिंदु तक पहुँच जाता है, जब यह जानता है कि यह सुरक्षित है ऐसा करने के लिए क्योंकि Thread.interrupt() बाधा प्रतिक्रिया की लक्ष्य धागा सुविधा देता है।

मुझे पता है कि स्टॉप को बहिष्कृत किया गया है। क्या दूसरी चीज इसे असुरक्षित बनाती है?

उपरोक्त लिंक देखें।

क्या कोई ऐसी जगह है जहां मैं स्टॉप विधि का उपयोग कर सकता हूं? यदि ऐसा है तो मुझे एक उदाहरण दें।

सिद्धांत रूप में, यदि आप जानते थे कि धागा आप रोक गया:

  • कभी डाटा संरचनाओं अन्य धागे के साथ साझा अद्यतन नहीं किया,
  • इंतजार/सूचित या उच्च स्तर का उपयोग नहीं किया सिंक्रनाइज़ेशन कक्षाएं, या उन पर निर्भर कक्षाएं,
  • और संभवतः कुछ अन्य चीजें।

उदाहरण के लिए, मुझे लगता है कि इस सूत्र stop() करने के लिए सुरक्षित होगा:

new Thread(new Runnable(){ 
    public void run(){for (long l = 0; l > 0; l++){}}).start(); 

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

+4

+1: स्टॉप() का उपयोग करने में समस्या यह है कि यह केवल अच्छी तरह से व्यवहार, अच्छी तरह समझी, सरल धागे के साथ सुरक्षित रूप से काम करता है, हालांकि यदि यह अच्छी तरह व्यवहार करता है तो आपको स्टॉप() का उपयोग करने की आवश्यकता नहीं है। –

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