मुझे पता है कि जावा थ्रेड में implements Runnable
is preferred over extends Thread
है क्योंकि यह आवश्यक होने पर हमें कुछ अन्य वर्ग का विस्तार करने की अनुमति देता है। लेकिन अगर ऐसा है, तो extends Thread
के पास implements Runnable
पर भी अपने फायदे हैं और यदि हां, तो ये फायदे क्या हैं?'थ्रेड फैलता है' क्यों मौजूद है, जब 'रननेबल लागू करता है' सभी मामलों में विजेता
उत्तर
क्योंकि कभी-कभी (लगभग कभी नहीं, लेकिन कभी-कभी) आप Thread
के मूल व्यवहार को बदलने में सक्षम होना चाहते हैं।
वह तब होता है जब आपको इसे विस्तारित करने की आवश्यकता होगी।
आप Thread
कक्षा से किसी विधि को ओवरराइड करके इसे बदल सकते हैं, आप Runnable
से इसे लागू करके इसे नहीं कर सकते हैं।
उदाहरण [यहां] (http://stackoverflow.com/questions/34905333/in-run-method-how-to-find-from-where-start- कहा गया था/34905821 # 34905821) - पूछताछ जानना चाहता था कि कौन सा धागा इस धागे को बनाया/शुरू किया। ऐसा करने के लिए कन्स्ट्रक्टर ओवरराइड और 'स्टार्ट' ओवरराइड करता है। – OldCurmudgeon
जावा 1.0 जारी होने के बाद पिछले 20+ वर्षों में, एक अच्छा डिजाइन पैटर्न क्या माना जाता है। हालांकि, जावा पिछड़ा संगतता के लिए प्रतिबद्ध है जिसका अर्थ है पुराना कोड जो खराब डिजाइन पैटर्न का उपयोग कर सकता है, अभी भी काम करेगा।
मेरे पालतू जानवरों में से एक StringBuffer
है जिसके लिए इसे सिंक्रनाइज़ करने की विधि कभी भी अच्छी बात नहीं थी, इसे दस साल पहले बदल दिया गया था, लेकिन दुर्भाग्यवश डेवलपर्स को आज इसका उपयोग करने से रोका नहीं गया है और यहां तक कि नए डेवलपर्स इसका उपयोग भी करते हैं, भले ही जावा का उपयोग शुरू करने से पहले इसे हटा दिया गया था।
रननेबल और थ्रेड्स को अवरुद्ध करने के बीच की पसंद में "डिज़ाइन पैटर्न" से कोई लेना देना नहीं है, जो कोई समझ नहीं लेता है। ये दो अलग-अलग उपयोग-मामले परिदृश्य हैं – specializt
डिज़ाइन पैटर्न संरचना बनाम विरासत हैं। आपके मन में दो अलग-अलग उपयोग के मामले क्या हैं। सब-क्लासिंग 'थ्रेड' * बहुत ही कम * कुछ भी ओवरराइड करने के बारे में है लेकिन' रन() ' –
आपको लगता है कि 'रननेबल' किसी भी तरह से 'थ्रेड' से संबंधित है। अच्छा यह नहीं है। बिलकुल। Runnables अवरुद्ध कर रहे हैं, निष्पादन योग्य एल्गोरिदम और धागे असीमित, स्वतंत्र हैं जो कॉलिंग थ्रेड समाप्त होने के बाद भी लंबे समय तक चल सकते हैं। कृपया उन विषयों के बारे में उत्तर न लिखें जो आपके लिए विदेशी हैं, बहुत बहुत धन्यवाद। इस सवाल को _ "बेहतर क्या होगा: जीएम फसलों या बुरे तोड़ने के आखिरी सत्र में सुधार किया जा सकता है?" _ --- गणना नहीं करता है। – specializt
- 1. थ्रेड में चलने योग्य रननेबल क्यों संभव नहीं है?
- 2. विजेता क्या है?
- 3. सिंगलेट्स एक्शनस्क्रिप्ट संस्कृति में क्यों फैलता है?
- 4. रननेबल में लागू रूपांतरण?
- 5. सी # डिक्शनरी सभी IDictionary क्यों लागू नहीं करता है?
- 6. AsyncTask और थ्रेड/रननेबल
- 7. क्यों "चलने योग्य लागू" "थ्रेड फैला" पर पसंदीदा है?
- 8. जावा एक्जिक्यूटर क्लास में सभी रननेबल थ्रेड को कैसे रोकें?
- 9. HttpServlet Serializable लागू क्यों करता है?
- 10. `ScalaObject` क्यों मौजूद है?
- 11. ArrayList क्यों "सूची लागू करता है"?
- 12. इरादा क्लोनबल लागू क्यों करता है?
- 13. एक्शनस्पोर्ट लागू क्यों करता है Serializable
- 14. java.util.List Serializable लागू क्यों नहीं करता है?
- 15. क्या हैंडलरपोस्ट (रननेबल) एक नया धागा शुरू करता है?
- 16. थ्रेड क्लास को विस्तारित करके या रननेबल लागू करके थ्रेड बनाने के लिए और क्या सलाह दी जाती है?
- 17. java.lang क्यों है। जावा में थ्रेड क्लास डिजाइनरों द्वारा अंतिम रूप से चिह्नित नहीं है?
- 18. मिंगव क्यों मौजूद है?
- 19. Console.Out.WriteLine क्यों मौजूद है?
- 20. skip_before_filter जब api_key मौजूद है
- 21. `DatabaseGeneratedOption.None` क्यों मौजूद है?
- 22. थ्रेड को IDISposable लागू क्यों नहीं किया जाता है?
- 23. सभी मामलों में लागू नहीं किए गए उपनाम पैरामीटर सीमाएं
- 24. थ्रेड क्लास (या रननेबल लागू करने के बजाए थ्रेड को विस्तारित करने के लिए) का मुख्य लाभ क्या है
- 25. निष्पादक सेवा इंटरफ़ेस ऑटोक्लोसेबल को लागू क्यों नहीं करता है?
- 26. django समस्या फैलता है - बच्चा टेम्पलेट
- 27. मुख्य थ्रेड में चालक को निष्पादित क्यों करता है?
- 28. जावा में स्ट्रिंग क्लास Iterable लागू क्यों नहीं करता है?
- 29. क्यों जावा में HttpServlet serializable लागू करता है?
- 30. Thread.currentThread() का उपयोग क्यों करें Thn.interrupted() के बजाय रननेबल को लागू किया गया है?
@proudandhonour: हाँ, मैंने उस प्रश्न का उत्तर पढ़ा है, लेकिन सभी उत्तरों यह बता रहे हैं कि 'लागू करने योग्य उपकरण' कैसे अच्छा है। और वास्तव में उन उत्तरों ने मेरे दिमाग में इस सवाल को बनाया। – rahul
@Proudandhonour क्या आप इस प्रश्न का उत्तर देने वाले उत्तर से लिंक करना चाहते हैं? यह पहले कुछ में प्रतीत नहीं होता है। – djechlin
परिदृश्य पर विचार करें, जब धागा शुरू होता है, तो आप उस विशेष थ्रेड के विवरण को डीबी में जोड़ना चाहते हैं। यह व्यवसाय तर्क से अलग है जो आपके पास() विधि में है, इस प्रकार आप इसे अलग रखना चाहते हैं। इस प्रकार, आप दोनों प्रारंभ() और रन() विधि –