2011-05-23 21 views
12

अच्छा दिन सभी एक साथ कई धागे चलाने के लिए सलाह दी जाती है कि यह कक्षा से अलग थ्रेड ऑब्जेक्ट्स बनाने या दो कक्षाएं बनाने के लिए सलाह दी जाती है जहां एक रननेबल लागू होता है और एक थ्रेड फैलाता है और फिर दोनों से थ्रेड ऑब्जेक्ट्स बनाता है यह मानने की जरूरत है कि हम एक साथ 7- 10 कार्यों को चलाने की कोशिश कर रहे हैं।एकाधिक धागे को एक साथ चलाना

  1. क्या, सबसे अच्छा समाधान कर रहे हैं? ..
  2. वहाँ किसी भी नुकसान या प्रदर्शन हिट रहे हैं, तो एक एकल वर्ग से अलग धागा वस्तुओं बनाता है ?.

धन्यवाद। टिप्स हमेशा के रूप में सराहना की।

+0

एक धागा और एक प्रक्रिया दो अलग-अलग चीजें हैं। यदि आपका मतलब थ्रेड है, तो "थ्रेड" शब्द का प्रयोग करें, शब्द "प्रक्रिया" नहीं। –

+0

क्या आप वास्तव में ऑपरेटिंग सिस्टम प्रक्रियाओं का मतलब है? प्रोग्रामिंग के संदर्भ में आमतौर पर प्रक्रियाओं का अर्थ है; यदि आप वास्तव में नौकरियों या कार्यों का मतलब रखते हैं, तो शब्द प्रक्रिया का उपयोग करने से बचें क्योंकि यह अन्य प्रोग्रामर को भ्रमित कर देगा। –

+0

ओह, माफ करना मेरा मतलब थ्रेड था! – Rexx

उत्तर

2

मैं व्यक्तिगत रूप से विकल्प (1) (उसी कक्षा के 2 अलग-अलग धागे बनाना) के लिए जाना होगा।

मुझे लगता है कि नौकरी के लिए 2 अलग-अलग वर्ग बनाने की आवश्यकता नहीं है जो एक ही कक्षा के 2 अलग-अलग धागे द्वारा किया जा सकता है।

18
  1. महान java.util.concurrent पैकेज पर एक नजर डालें
  2. वहाँ बाहर एक एकल वर्ग

यहाँ से अलग धागा वस्तुओं बनाने का कोई प्रदर्शन नुकसान एक छोटी उदाहरण है कर रहे हैं:

private static class SomeTask implements Runnable 
{ 
    @Override 
    public void run() 
    { 
    doSomething(); 
    } 
} 

public static void main(String[] args) 
{ 
    ExecutorService executor = Executors.newCachedThreadPool(); 
    for (int i = 0; i < 8; i++) executor.execute(new SomeTask()); 
} 
1

थ्रेड को विस्तारित करके या रननेबल को लागू करके और new Thread(runnable) का उपयोग करके थ्रेड बनाने के बीच प्रदर्शन में थोड़ा अंतर है। चाहे एक वर्ग या कई का उपयोग करना भी अप्रासंगिक है। काम करने के आधार पर आपको अपनी कक्षा संरचना तैयार करनी चाहिए; यदि दो धागे अलग-अलग डेटा पर एक ही काम कर रहे हैं, तो दोनों के लिए एक ही कक्षा का उपयोग करें।

साझा डेटा तक पहुंच (चाहे स्थैतिक वर्ग चर या कुछ और) हमेशा एक बड़ी समस्या है।

2

मुझे नहीं लगता कि यह महत्वपूर्ण है कि आप इसे किस तरह से करते हैं। यदि आपके पास बहुत कम रहने वाले धागे होने जा रहे हैं तो आप शायद थ्रेड पूल चाहते हैं, java.util.concurrent.Executors देखें। आम तौर पर मैं रननेबल प्रकार का एक बेनामी वर्ग बना देता हूं, उदा। आप थ्रेड वर्ग का विस्तार हैं, तो आप किसी भी अन्य वर्गों (जावा एकल विरासत है) का विस्तार नहीं कर सकते हैं:

executor.execute(new Runnable() { 
    //thread code goes here 
}); 
0

मुख्य बात यह है कि फर्क नहीं पड़ता कि कैसे आप अपने वस्तु पदानुक्रम के लिए बनाया गया है। इसलिए रननेबल को कार्यान्वित करके, आप अभी भी अपने डोमेन मॉडल में अन्य कक्षाओं का विस्तार कर सकते हैं।

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