2016-01-22 9 views
16

मुझे पता है कि जावा थ्रेड में implements Runnable is preferred over extends Thread है क्योंकि यह आवश्यक होने पर हमें कुछ अन्य वर्ग का विस्तार करने की अनुमति देता है। लेकिन अगर ऐसा है, तो extends Thread के पास implements Runnable पर भी अपने फायदे हैं और यदि हां, तो ये फायदे क्या हैं?'थ्रेड फैलता है' क्यों मौजूद है, जब 'रननेबल लागू करता है' सभी मामलों में विजेता

+4

@proudandhonour: हाँ, मैंने उस प्रश्न का उत्तर पढ़ा है, लेकिन सभी उत्तरों यह बता रहे हैं कि 'लागू करने योग्य उपकरण' कैसे अच्छा है। और वास्तव में उन उत्तरों ने मेरे दिमाग में इस सवाल को बनाया। – rahul

+1

@Proudandhonour क्या आप इस प्रश्न का उत्तर देने वाले उत्तर से लिंक करना चाहते हैं? यह पहले कुछ में प्रतीत नहीं होता है। – djechlin

+0

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

उत्तर

30

क्योंकि कभी-कभी (लगभग कभी नहीं, लेकिन कभी-कभी) आप Thread के मूल व्यवहार को बदलने में सक्षम होना चाहते हैं।

वह तब होता है जब आपको इसे विस्तारित करने की आवश्यकता होगी।

आप Thread कक्षा से किसी विधि को ओवरराइड करके इसे बदल सकते हैं, आप Runnable से इसे लागू करके इसे नहीं कर सकते हैं।

+6

उदाहरण [यहां] (http://stackoverflow.com/questions/34905333/in-run-method-how-to-find-from-where-start- कहा गया था/34905821 # 34905821) - पूछताछ जानना चाहता था कि कौन सा धागा इस धागे को बनाया/शुरू किया। ऐसा करने के लिए कन्स्ट्रक्टर ओवरराइड और 'स्टार्ट' ओवरराइड करता है। – OldCurmudgeon

18

जावा 1.0 जारी होने के बाद पिछले 20+ वर्षों में, एक अच्छा डिजाइन पैटर्न क्या माना जाता है। हालांकि, जावा पिछड़ा संगतता के लिए प्रतिबद्ध है जिसका अर्थ है पुराना कोड जो खराब डिजाइन पैटर्न का उपयोग कर सकता है, अभी भी काम करेगा।

मेरे पालतू जानवरों में से एक StringBuffer है जिसके लिए इसे सिंक्रनाइज़ करने की विधि कभी भी अच्छी बात नहीं थी, इसे दस साल पहले बदल दिया गया था, लेकिन दुर्भाग्यवश डेवलपर्स को आज इसका उपयोग करने से रोका नहीं गया है और यहां तक ​​कि नए डेवलपर्स इसका उपयोग भी करते हैं, भले ही जावा का उपयोग शुरू करने से पहले इसे हटा दिया गया था।

+2

रननेबल और थ्रेड्स को अवरुद्ध करने के बीच की पसंद में "डिज़ाइन पैटर्न" से कोई लेना देना नहीं है, जो कोई समझ नहीं लेता है। ये दो अलग-अलग उपयोग-मामले परिदृश्य हैं – specializt

+0

डिज़ाइन पैटर्न संरचना बनाम विरासत हैं। आपके मन में दो अलग-अलग उपयोग के मामले क्या हैं। सब-क्लासिंग 'थ्रेड' * बहुत ही कम * कुछ भी ओवरराइड करने के बारे में है लेकिन' रन() ' –

+0

आपको लगता है कि 'रननेबल' किसी भी तरह से 'थ्रेड' से संबंधित है। अच्छा यह नहीं है। बिलकुल। Runnables अवरुद्ध कर रहे हैं, निष्पादन योग्य एल्गोरिदम और धागे असीमित, स्वतंत्र हैं जो कॉलिंग थ्रेड समाप्त होने के बाद भी लंबे समय तक चल सकते हैं। कृपया उन विषयों के बारे में उत्तर न लिखें जो आपके लिए विदेशी हैं, बहुत बहुत धन्यवाद। इस सवाल को _ "बेहतर क्या होगा: जीएम फसलों या बुरे तोड़ने के आखिरी सत्र में सुधार किया जा सकता है?" _ --- गणना नहीं करता है। – specializt

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