2012-08-02 8 views
5

मैं Oracle जावा एपीआई, जो कि FutureTask.isDone()जावा FutureTask पूरा होने की जांच

कुछ जानकारी देता है जाँच कर ली है, लेकिन मैं जाँच करने के लिए कार्य पूरा हो या किसी त्रुटि के साथ समाप्त कर दिया है कि क्या जरूरत है। isDone() विधि तब भी वापस आ जाएगी जब यह पूर्ण/समाप्त हो जाती है। लेकिन मुझे यह जानने की जरूरत है कि कुछ समस्या के कारण यह पूरा हो गया है या समाप्त हो गया है या नहीं।

उत्तर

11

यदि FutureTask किया गया है, तो get() पर कॉल करें (बिना किसी टाइमआउट के हो सकता है, इसे तुरंत वापस करना चाहिए)। यह या तो कुछ परिणाम वापस आ जाएगी या फेंक:

ExecutionException - अगर गणना एक अपवाद

ExecutionException.getCause() अपवाद अपने कार्य से फेंका वापस आ जाएगी फेंक दिया।

+0

आप 'get()' को कॉल कर सकते हैं भले ही 'फ़्यूचरटास्क' अभी तक नहीं किया गया हो; इस मामले में 'प्राप्त करें()' पूरा होने की प्रतीक्षा करता है। – Pino

0

FutureTask.get() पर कॉल क्यों नहीं करें?

यह परिणाम देगा या मूल रूप से फेंक दिया/पकड़ा अपवाद युक्त अपवाद फेंक देगा। यदि कार्य पूरा नहीं हुआ है तो ब्लॉक ब्लॉक होगा, और आपके पास टाइमआउट प्रदान करने का विकल्प होगा।

मैं करूंगा सामान्य रूप से उम्मीद ग्राहकों बस बदले में प्रत्येक FutureTask पर get() फोन एक बार बनाया है, बजाय isDone() सर्वेक्षण करना।

0

जब isDone() वापस लौटें तो आप निष्पादन के परिणाम की जांच करने के लिए get() विधि पर कॉल करके परिणाम प्राप्त करना चाहते हैं। get() ऑपरेशन ExecutionException फेंक सकता है, जिसमें कारण शामिल है, जहां आप कोई समस्या पा सकते हैं।

+1

आप 'get()' को कॉल कर सकते हैं भले ही 'isDone()' अभी तक गलत है; इस मामले में 'प्राप्त करें()' पूरा होने की प्रतीक्षा करता है। – Pino