के साथ future.get का व्यवहार क्या कोई मुझे कुछ दस्तावेज पर इंगित कर सकता है जो स्पष्ट करता है कि 0 के टाइमआउट के साथ 'भविष्य.get`' इंतजार नहीं करेगा?0 timeout
java.util.concurrent.Future
के लिए API दस्तावेज़ future.get(0, unit)
का व्यवहार स्पष्ट नहीं करते हैं। अपने आप पर खड़े होकर, बयान "सबसे अधिक समय के लिए आवश्यक होने पर प्रतीक्षा करता है ..." का तात्पर्य है कि यह आमंत्रण बिल्कुल इंतजार नहीं करेगा, लेकिन Object.wait(0)
(अनंत प्रतीक्षा) के लंबे समय से व्यवहार को देखते हुए, मैं निर्भर होने के लिए परेशान हूं कुछ JDK-प्रदान की कक्षाएं (अर्थात। FutureTask
) मुझे लगता है कि Future
के इस विशेष कार्यान्वयन जब टाइमआउट 0.
मैं है इंतजार नहीं करता है के स्रोत स्कैनिंग future.get(0, unit)
की एक "कोई प्रतीक्षा" व्यवहार पर डी
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
लेकिन मैं भविष्य के बारे में परेशान हूं को लागू करने कि एक अनंत प्रतीक्षा के रूप में है, तो बजाय, मैं स्पष्ट रूप से इसे जिस तरह से मैं इसे काम करने के लिए उम्मीद करेंगे कोड जोड़ने के बाद:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
@skaffman टैग फ़िक्सअप के लिए धन्यवाद। – mwhidden