जब मैंने जावा का उपयोग करके (अकादमिक) सॉफ़्टवेयर का एक टुकड़ा विकसित किया, तो मुझे एक एपीआई का उपयोग करने के लिए मजबूर होना पड़ा जो कि बुरी तरह कार्यान्वित किया गया था। इसका मतलब यह है कि इनपुट डेटा के एक निश्चित सेट के लिए इस एपीआई को कॉल कभी-कभी कभी नहीं लौटाएगा। यह सॉफ़्टवेयर में एक बग होना चाहिए क्योंकि यह प्रस्तावित एल्गोरिदम निर्धारित थे, और कभी-कभी यह डेटा के सेट पर समाप्त हो जाता है, कभी-कभी यह डेटा के उसी सेट पर एक अनंत लूप में चला जाएगा ...कॉल से अपने प्रोग्राम को "खराब" एपीआई में कैसे अलग करें?
हालांकि, एपीआई को ठीक करना या इसे पुन: कार्यान्वित करना बस दायरे से बाहर था। मेरे पास स्रोत भी था लेकिन एपीआई अन्य एपीआई पर भारी निर्भर था जो अनियंत्रित और बिना स्रोत के थे और उस समय तक वेब से गायब हो गए थे (या कभी नहीं रहे थे?)। दूसरी तरफ, यह "खराब" एपीआई केवल एकमात्र ऐसा था जिसने मेरी विशिष्ट समस्या को हल किया, इसलिए मुझे वास्तव में इसके साथ रहना पड़ा।
सवाल यह है कि: एपीआई से निपटने का सबसे साफ तरीका क्या है, जो कि अच्छा है, बुरा? जब मुझे इस समस्या का सामना करना पड़ा तो मैंने एपीआई को अलग थ्रेड में कॉल करने का फैसला किया। एक और धागा तब कभी-कभी जांच करेगा कि क्या यह धागा समाप्त हो गया था। यदि कुछ निश्चित समय बीत चुका है, तो मैं प्रसंस्करण धागे को Thread#stop()
का उपयोग करके मार दूंगा और फिर से प्रसंस्करण शुरू कर दूंगा, उम्मीद कर रहा हूं कि यह अगली बार वापस आ जाएगा। अब, मुझे पता है (और फिर वापस पता था) कि इस विधि को बहिष्कृत किया गया है और इसका उपयोग नहीं किया जाना चाहिए। लेकिन इस अकादमिक संदर्भ में यह सॉफ़्टवेयर संभावित रूप से को क्रैश होने की बजाय एक अनिर्धारित स्थिति में चलाने के लिए स्वीकार्य था।
असीमित पाश में चलने वाले प्रोसेसिंग थ्रेड को अनदेखा करना भी स्वीकार्य नहीं था क्योंकि इसमें कुछ सीपीयू-गहन ऑपरेशन किए गए थे जो उपयोगकर्ता की मशीन को काफी धीमा कर देंगे।
एक और तरीका जिसकी मैंने कोशिश नहीं की थी, एक थ्रेड के बजाय अलग प्रक्रिया में प्रसंस्करण शुरू करना है, क्योंकि सॉफ़्टवेयर को असंगत स्थिति में डाले बिना एक उप-प्रक्रिया को साफ तरीके से मार दिया जा सकता है। या नया SwingWorker
वर्ग (जो अभी तक उपलब्ध नहीं था) ने नौकरी की है? इसमें cancel()
विधि है, लेकिन दस्तावेज़ों का कहना है कि यह "इस कार्य के निष्पादन को रद्द करने का प्रयास" है, इसलिए यह किसी विश्वसनीय दृष्टिकोण की तरह नहीं दिखता है।
मैंने अलगाव API के दिलचस्प संदर्भ के कारण आपका उत्तर स्वीकार कर लिया। उसके लिए धन्यवाद! –