मुझे किसी तरह की सेवा की आवश्यकता है जो कुछ कार्यों को एक साथ और 1 मिनट के लिए 1 सेकंड के अंतराल में चलाएगी।
यदि कोई एक कार्य विफल हो जाता है, तो मैं सेवा को रोकना चाहता हूं और प्रत्येक कार्य जो इसके साथ चलता है, किसी तरह का संकेतक है कि कुछ गलत हो गया है, अन्यथा यदि एक मिनट के बाद सब कुछ ठीक हो जाता है तो सेवा एक संकेतक के साथ बंद हो जाएगी जो सब ठीक हो गया।
उदाहरण के लिए, मेरे 2 कार्य हैं:
Runnable task1 = ()->{
int num = Math.rand(1,100);
if (num < 5){
throw new Exception("something went wrong with this task,terminate");
}
}
Runnable task2 = ()->{
int num = Math.rand(1,100)
return num < 50;
}
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
task1schedule = scheduledExecutorService.scheduleAtFixedRate(task1, 1, 60, TimeUnit.SECONDS);
task2schedule = scheduledExecutorService.scheduleAtFixedRate(task2, 1, 60, TimeUnit.SECONDS);
if (!task1schedule || !task2schedule) scheduledExecutorService.shutdown();
मुझे इस बारे में कोई विचार करना चाहिए कि मुझे इससे कैसे निपटना चाहिए और चीजों को यथासंभव सामान्य बनाना चाहिए?
Math.rand
एक अंतर्निहित एपीआई नहीं है। एक कार्यान्वयन कीRunnable
एकvoid run
परिभाषा होनी चाहिए । प्रदान की गई संदर्भ में प्रकारtask1/2schedule
होगाScheduledFuture<?>
। वास्तविक प्रश्न पर चलते हुए, इसका उपयोग कैसे किया जाता हैawaitTermination
? आप ऐसा कर सकते हैंscheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
। वैकल्पिक रूप से, अगर किसी भी कार्य को उसके सामान्य पूर्ण होने से पहले रद्द कर दिया गया हो तो जाँच के बारे मेंif (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
:?