मैं एक java8 किताब पढ़ रहा हूँ और scheduleAtFixedRate और scheduleWithFixedDelay विधियों के बीच ScheduledExecutorService के अंतर को देखता हूं।

मैं पुस्तक पर इन दो विधियों के बीच अंतर को समझता हूं, हालांकि जब मैंने एक साधारण कोड लिखने की कोशिश की। यह इतना स्पष्ट नहीं है कि scheduleAtFixedRate तुल्यकालिक का व्यवहार क्यों करता है।

जैसा कि आप देख सकते हैं, मैं पूल में 100 धागे आवंटित कर रहा हूं। और अनुसूचक हर 1ms में एक नया कार्य प्रस्तुत करेगा, और प्रति कार्य, 1s की देरी होगी।

    ScheduledExecutorService s = Executors.newScheduledThreadPool(100);
    s.scheduleAtFixedRate(() -> {
        int num = new Random().nextInt(100);
        System.out.println("Hello World" + num);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Finished" + num);
    }, 0, 1, TimeUnit.MILLISECONDS);

लेकिन मुझे यह आउटपुट क्यों मिल रहा है? एक के बाद एक नया कार्य चलेगा।

Hello World94
Finished94
Hello World14
Finished14
Hello World90
Finished90
Hello World26
Finished26
3
Ruelos Joel 26 मई 2019, 19:31

1 उत्तर

सबसे बढ़िया उत्तर

ScheduledThreadPoolExecutor#scheduleAtFixedRate

यदि इस कार्य के निष्पादन में इसकी अवधि से अधिक समय लगता है, तो बाद के निष्पादन देर से शुरू हो सकते हैं, लेकिन साथ-साथ निष्पादित नहीं होंगे।

तो इसके साथ-साथ निष्पादित होने की प्रतीक्षा न करें, यह हमेशा अनुक्रमिक रूप से निष्पादित होगा ..

5
Yassin Hajaj 26 मई 2019, 16:41