আমার এমন একধরণের পরিষেবা প্রয়োজন যা একসাথে কয়েকটি কাজ চালাবে এবং 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();
?