2010-10-26 15 views
7

क्या किसी के पास जावा थ्रेड क्लास की रन() विधि के इतिहास में कोई अंतर्दृष्टि है? लगभग हर समय, इसे ओवरराइडिंग द्वारा उपयोग किया जाता है और इस प्रकार संरक्षित संशोधक अधिक उपयुक्त होगा? यह अभी भी उपयोगकर्ताओं के लिए सार्वजनिक एपीआई के रूप में प्रारंभ() को छोड़ देगा और इस प्रकार गलतियों के लिए गलतियों के लिए कोई भी कमरा नहीं छोड़ देगा() गलती से।जावा थ्रेड के रन पर सार्वजनिक संशोधक के लाभ()

उत्तर

10

ThreadRunnable लागू करता है, जो run() विधि को परिभाषित करता है, इसलिए इसे सार्वजनिक होना चाहिए।

लेकिन चूंकि जावा 1.5 java.lang.Thread के बजाय Executors services का उपयोग करने की सलाह दी जाती है। निष्पादक वास्तविक निष्पादक से कार्य की इकाई (Runnable, Callable) निष्पादित करने के लिए decoupling कर रहे हैं। (Thread के साथ वे एक ही बात थे)

+0

हाँ, आप सही हैं और मुझे लगता है कि यही कारण है कि रन() सार्वजनिक विधि के रूप में है। असल में, चूंकि एक कन्स्ट्रक्टर है जो एक रननेबल तर्क लेता है - सार्वजनिक थ्रेड (रननेबल लक्ष्य), जिसे रननेबल को लागू करने की आवश्यकता को अस्वीकार कर देना चाहिए था? – gshx

+0

यह "सलाह नहीं है"? इसके विपरीत नहीं? :-) –

+0

धन्यवाद। एक अतिरिक्त 'नहीं' :) हटा दिया गया। – Bozho

2

runRunnable इंटरफ़ेस में परिभाषित किया गया है और इंटरफ़ेस में परिभाषित सभी विधियां सार्वजनिक हैं।

+0

धन्यवाद लेकिन मुझे अपने प्रश्न में कुछ और विस्तार करना चाहिए था - क्या थ्रेड को वास्तव में रननेबल को लागू करने की आवश्यकता है जब यह इंजेक्शन वाले रननेबल लक्ष्य पर इसके सभी काम करता है? – gshx

3

आप थ्रेड को ओवरराइड करने से बेहतर नहीं हैं, आपको एक रननेबल बनाना चाहिए और इसे नए थ्रेड के लिए निर्माता में पास करना चाहिए। इस तरह से काम किया जा रहा है, रननेबल, कार्यान्वयन तंत्र, थ्रेड से अलग रखा जाता है।

+0

नाथन, मैं आपसे सहमत हूं और यही कारण है कि मैं सोच रहा हूं कि यह पहले स्थान पर क्यों है - थ्रेड लागू करने का थ्रेड लागू करने का क्या उपयोग होता है जब थ्रेड क्लास में पहले से ही एक कन्स्ट्रक्टर होता है जो रननेबल को स्वीकार करता है जो रन ओवरराइड करता है() – gshx

+0

@gshx : अच्छा सवाल, मेरा अनुमान है कि यह एक शॉर्टकट के रूप में प्रदान किया जाता है। –

1

मुझे लगता है कि यह मूल रूप से एक खराब डिज़ाइन है, जो उपयोगकर्ता के लिए "सरल" चीजों को बनाने के हित में, कार्य को चलाने के लिए थ्रेड पर Runnable) को सीधे चलाने के लिए अनुमति देता है। चूंकि Thread जेडीके 1.0 में जोड़ा गया था, हालांकि, उस डिजाइन को तब से बदला नहीं जा सका है, Executor ढांचे के पक्ष में बस हटा दिया गया है। जेडीके 1.0 बहुत समय पहले था, और तब से विभिन्न गलतियों को अनुभव के लाभ के बिना बनाया गया था।

+0

मैं वास्तव में निष्पादकों का उपयोग करने के सुझाव के साथ थ्रेड पर रन() को बहिष्कृत करने के पक्ष में हूं।इसे अभी संरक्षित करना स्पष्ट रूप से असंभव है। – gshx

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