/ / कई धागे की प्रतीक्षा करते समय सर्वश्रेष्ठ अभ्यास - समय, गिनती या कुछ और? - जावा, मल्टीथ्रेडिंग

कई धागे की प्रतीक्षा करते समय सर्वश्रेष्ठ अभ्यास - समय, गिनती या कुछ और? - जावा, मल्टीथ्रेडिंग

मेरा आवेदन, रनटाइम के दौरान, कई धागे (इस उदाहरण में 7) स्वतंत्र काम कर रहा है। हालांकि, हर बार थोड़ी देर में, धागे को अपने डेटा को सिंक्रनाइज़ करना होगा।

यह डेटा सिंक्रनाइज़र ऑब्जेक्ट को कॉल करने वाले थ्रेड द्वारा किया जाएगा, जिनके सभी का संदर्भ है।

इस वर्ग में प्रवाह के लिए मेरा विचार इस तरह दिखता है:

public class DataSynchronizer {

public void synchronizeData(List<Data> threadData) {
// Wait for all 7 threads to call this method

// When all 7 are here, hold them here & do work using one of the threads
// or a new anonymous thread

// Release the threads & let them continue their independent work
}
}

मेरा सवाल यह है कि, सिंचन काम करने से पहले "सभी एक्स धागे की प्रतीक्षा करें" के लिए मेरे लिए सबसे अच्छा तरीका क्या है?

मुझे पता है कि सभी धागे एक दूसरे के अधिकतम 2 सेकंड के भीतर सिंक्रनाइज़डेटा विधि को कॉल करेंगे।

मैं भी ऐसा करूँ,

1) पहली थ्रेड के बाद 2s के लिए प्रतीक्षा करें विधि को कॉल करें और मान लें कि सभी धागे अब भी पहुंचे हैं? या

2) यह सुनिश्चित करने के लिए एक गिनती रखें कि सभी सक्रिय धागे आ गए हैं? (यदि विधि थ्रेड विधि से पहले थ्रेड क्रैश हो जाती है तो ऐप अनंत काल तक प्रतीक्षा करेगा)

3) गणना + टाइमआउट?

4) ???

उत्तर:

जवाब के लिए 2 № 1

यह वही है CyclicBarrier के लिए है। यह आपको उन स्थानों को परिभाषित करने की अनुमति देता है जहां सभी आने तक धागे इंतजार करेंगे, और फिर वैकल्पिक रूप से रन चलाएंगे Runnable सिंक्रनाइज़ेशन या ऐसी अन्य चीज करने के लिए।


जवाब के लिए 2 № 2

मुझे लगता है कि आपको java.util.concurrent.CyclicBarrier की आवश्यकता है।


उत्तर № 3 के लिए 1
  1. मान लें और धागे एक बहुत जोखिम भरा दृष्टिकोण है।
  2. अनंत काल की प्रतीक्षा कितनी खराब है? मेरे लिए असुविधाजनक लगता है।
  3. यदि आप टाइमआउट हिट करते हैं तो क्या आप कुछ उपयोगी कर सकते हैं? कार्यक्रम को क्रैश करें, गलती धागे को पुनरारंभ करें, यह क्या कर रहा है इसके बारे में कुछ मानें?

अनुवर्ती प्रश्न:

  • क्या होता है यदि कोई थ्रेड सिंक्रनाइज़ेशन में भाग नहीं लेता है?
  • सिंक देर हो चुकी है तो क्या होता है?
  • क्या आपकी विधि एक थ्रेड को दूसरे से बताना चाहिए, या क्या वे सिर्फ 7 अदला-बदले श्रमिक हैं?