जावा का शेड्यूल WithFixedDelay एक रननेबल के साथ क्यों काम करता है लेकिन फ्यूचरटास्क एक रननेबल नहीं है?जावा का शेड्यूल WithFixedDelay एक रननेबल के साथ क्यों काम करता है लेकिन फ्यूचरटास्क <?> एक रननेबल को लपेटता नहीं है?
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("beep");
return 1;
}
}), 1, 5, TimeUnit.SECONDS);
पैदा करता है:
यह दो अलग-अलग कोड नमूने के साथ बहुत आसानी से दिखाया जा सकता है
बीप
लेकिन अनुप्रयोग से बाहर नहीं है, यह बस प्रतीक्षा करने के लिए प्रकट होता है ।
लेकिन:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("beep ");
}
}, 1, 5, TimeUnit.SECONDS);
पैदा करता है:
बीप बीप बीप बीप
बीप 5 सेकंड के अंतराल पर।
ऐसा लगता है कि यहां कुछ प्रकार का लॉक हो रहा है जिसे मैं निर्धारित नहीं कर सकता।
जब भी मैं अपना कोड चलाता हूं जो बीप बीप बीप बीप बीप का उत्पादन करता है, मुझे एक बीप भी नहीं मिलती है, और प्रक्रिया को निष्पादित करने से पहले खत्म हो जाती है। अगर मैं शुरुआती देरी को 1 से 0 में बदलता हूं, तो मुझे एक बीप मिलती है। – Marcus
कभी नहीं, ऐसा इसलिए था क्योंकि इसे निष्पादित करने के लिए निष्पादक सेवा.वाइट टर्मिनेशन() को अवरुद्ध करने की आवश्यकता थी। – Marcus