2015-02-21 6 views
10

जावा के Future.get() इस मामले में व्यवहार करते हैं जहां कार्य पूरा होने के बाद इसे कई बार कहा जाता है? क्या यह वही परिणाम देता है? या गणना के असफल होने पर एक ही अपवाद के साथ ExecutionException को बार-बार फेंक देता है? मुझे इसके बारे में दस्तावेज़ों में कुछ भी नहीं मिला!जावा - Future.get() एकाधिक आमंत्रण

+0

[भविष्य] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html) कक्षा दस्तावेज़ (और [भविष्य.get] (https://docs.oracle.com/javase/8/docs /api/java/util/concurrent/Future.html#get--)) अधिकांश प्रश्नों का उत्तर दें - कुछ और पढ़ना होगा। – user2864740

+1

और आप इसे भी आजमा सकते हैं और देख सकते हैं। –

उत्तर

18

आप जितनी बार चाहें Future पर get() पर कॉल कर सकते हैं, और यह केवल तभी ब्लॉक करेगा जब परिणाम उत्पन्न करने वाला कार्य अभी तक समाप्त नहीं हुआ है।

यदि कार्य पहले ही समाप्त हो चुका है, तो यह तुरंत कार्य के परिणाम को वापस कर देगा।

यदि कार्य अपवाद के साथ विफल रहा है, तो get() पर कॉल करने पर प्रत्येक बार जब आप इसे कॉल करते हैं तो ExecutionException फेंक देंगे।

4

मुझे इसके बारे में दस्तावेज़ों में कुछ भी नहीं मिला!

क्या आपने उन्हें पढ़ा है? क्योंकि जब मैं उन्हें पढ़ा रहा उत्तर मिला है और यहाँ यह है ....

V get() 
throws InterruptedException, 
     ExecutionException 

वेट्स आवश्यक हो तो गणना को पूरा करने के लिए, और फिर उसके परिणाम प्राप्त करता है।

Returns: 
    the computed result 

Throws: 
    CancellationException - if the computation was cancelled 
    ExecutionException - if the computation threw an exception 
    InterruptedException - if the current thread was interrupted while waiting 

संगणना पूरा नहीं किया जाता है तो यह इंतजार करेंगे, और यह पहले से ही पूरा कर लिया है अगर यह परिणाम यथाशीघ्र वापस आ जाएगी, कोई फर्क नहीं पड़ता कि कितनी बार आप इसे

+0

आप कहां पढ़ रहे हैं? https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#get-- में मैं देखता हूं: गणना पूर्ण करने के लिए आवश्यक होने पर प्रतीक्षा करता है, और फिर इसके परिणाम को पुनर्प्राप्त करता है । अंतिम भाग के बिना। आपको वह जानकारी कहां मिलती है? मैं अनियंत्रित व्यवहार पर भरोसा नहीं करना चाहता, मुझे पता है कि अगर मैं कोशिश करता हूं तो क्या होता है, लेकिन मैं सटीक अनुबंध चाहता था। –

+0

@ मार्को सर्वेटो, तो कृपया ध्यान से लाइन पढ़ें, यह इंतजार करेगा कि प्रक्रिया पूरी नहीं हुई है या यह परिणाम वापस कर देगी, यह कहीं भी नहीं लिखा गया है कि अगर आप इसे बार-बार कहते हैं तो एक अपवाद आएगा। 'मुझे यह कोशिश करके यह जानकारी मिलती है, और फिर निष्कर्ष पर आया –

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