के साथ countDownLatch.await (int) के लिए एकाधिक कॉल मैं किसी अन्य घटक (एक अलग थ्रेड में चल रहे) से किसी निश्चित ईवेंट की प्रतीक्षा के लिए काउंटरडाउनलैच का उपयोग करता हूं। निम्नलिखित दृष्टिकोण अपने सॉफ़्टवेयर के शब्दों फिट होगा, लेकिन मुझे यकीन है कि क्या यह एक के रूप में काम मैं उम्मीद नहीं कर रहा हूँ:टाइमआउट
mCountDownLatch.await(3000, TimeUnit.MILLISECONDS)
otherComponent.aStaticVolatileVariable = true;
mCountDownLatch.await(3500, TimeUnit.MILLISECONDS);
... <proceed with other stuff>
परिदृश्य निम्नलिखित होना चाहिए: मैं 3 सेकंड के लिए प्रतीक्षा करें, और यदि कुंडी है 0 तक गिनती नहीं है, मैं उस चर के साथ दूसरे घटक को सूचित करता हूं, और फिर मैं 3.5 सेकंड तक प्रतीक्षा करता हूं। यदि फिर से टाइमआउट है, तो मुझे परवाह नहीं है और अन्य परिचालनों के साथ आगे बढ़ेगा।
नोट: मुझे पता है कि यह ऐसा नहीं दिखता है, लेकिन उपर्युक्त परिदृश्य मेरे सॉफ़्टवेयर में पूरी तरह से उचित और मान्य है।
मैंने प्रतीक्षा (int, TimeUnit) और CountDownLatch के दस्तावेज़ को पढ़ा है, लेकिन मैं जावा/एंड्रॉइड विशेषज्ञ नहीं हूं, इसलिए मुझे पुष्टि की आवश्यकता है। मेरे लिए, सभी स्थितियों वैध देखो:
- पहले इंतजार सफल होता है, तो अन्य तुरंत वापस आ जाएगी
- पहले इंतजार का समय समाप्त, तो अन्य इंतजार अभी भी मान्य है, तो इंतजार है; इसलिए, अन्य धागा स्थिर संकेत गौर करता है, दूसरा इंतजार वापस कर सकती है सफलतापूर्वक
- दोनों का इंतजार कॉल समय बाहर (यह मेरा सॉफ्टवेयर के अर्थ विज्ञान के अनुसार ठीक है)
मैं इंतजार का उपयोग कर रहा हूँ (.. सही ढंग से? क्या दूसरी प्रतीक्षा (...) उपर्युक्त तरीके से उपयोग की जा सकती है भले ही एक ही ऑब्जेक्ट पर पिछले प्रतीक्षा (...) का समय समाप्त हो गया हो?
धन्यवाद एक पहलू से कमी आती है। असल में, मेरा सवाल इससे कहीं अधिक सरल था, लेकिन अगर मैं सही हूं, तो आप वास्तव में * साबित हुए हैं कि मेरी धारणाएं सही हैं, इसलिए इसके लिए एक बड़ा धन्यवाद! मेरा मूल प्रश्न केवल यही था: यदि किसी ऑब्जेक्ट के लिए पहला इंतजार ** (** ** टाइम्स ** है, तो क्या मैं उसी ऑब्जेक्ट (जैसे मेरे कोड में) पर फिर से प्रतीक्षा कर सकता हूं? मुझे हां लगता है, लेकिन जैसा कि मैंने कहा, मैं जावा विशेषज्ञ नहीं हूं। (मुझे अंतिम पुष्टि मिलने के बाद, मैं निश्चित रूप से आपके उत्तर को उत्तर के रूप में चिह्नित करूंगा, क्योंकि यह मेरी आवश्यकता से अधिक है।) –
हे, ईमानदार होने के लिए, मैं 100% उत्तर के ऊपर से कुछ जवाब नहीं था मेरे सिर, और इस तरह का जवाब खोजने का सबसे अच्छा तरीका यह है कि इसे आजमाएं। इसलिए परीक्षण :) –