অন্য ধরনের টাস্ক পুল হল নির্ধারিত টাস্ক পুল। নামের দ্বারা বিচার করে, আমরা অনুমান করতে পারি যে একটি নির্দিষ্ট কাজ কখন চালু করা উচিত তা নির্ধারণ করতে আমরা এই ধরনের ব্যবহার করি।

এই ধরনের পরিষেবা উপযোগী হয় যখন আমাদের কিছু সময় অতিবাহিত হওয়ার পরে একটি কার্যকলাপ চালু করার জন্য একটি টাস্ক থাকে বা আমরা একটি পুনরাবৃত্ত কাজ নির্ধারণ করতে চাই।

একটি ব্যবহার করার জন্য, আমরা Executors.newScheduledThreadPool(1) কল করি ।

আমরা পরামিতি সম্পর্কে একটু পরে কথা বলব। কিন্তু আপাতত, আমাদের যা জানা দরকার তা হল যখন এই পদ্ধতিটি বলা হয় তখন আমরা একটি ScheduledExecutorService অবজেক্ট পাই।

ScheduledExecutorService হল একটি ইন্টারফেস যা ExecutorService প্রসারিত করে ।

এই ইন্টারফেসে নিম্নলিখিত পদ্ধতিগুলি উপস্থিত হয়:

পদ্ধতি ব্যাখ্যা

ScheduledFuture<?>
schedule(Runnable command,
                                  long delay, TimeUnit unit);
নির্দিষ্ট বিলম্বের পরে সঞ্চালিত একটি ওয়ান-টাইম অ্যাকশন তৈরি এবং এক্সিকিউট করে।

<V> ScheduledFuture<V>
schedule(Callable<V> callable,
                                      long delay, TimeUnit unit);
তৈরি করে এবং চালায় aনির্ধারিত ভবিষ্যতবস্তু যা একটি নির্দিষ্ট বিলম্বের পরে কার্যকর করে।

ScheduledFuture<?>
scheduleAtFixedRate(Runnable command,
                                             long initialDelay,
                                             long period,
                                             TimeUnit unit);
একটি পুনরাবৃত্ত ক্রিয়া তৈরি করে এবং সঞ্চালন করে যা প্রথমে নির্দিষ্ট প্রাথমিক বিলম্বের পরে এবং তারপর আবার নির্দিষ্ট সময়ের পরে চলে। অন্য কথায়, কার্যকরী শুরু হবে initialDelay এর পরে , তারপর initialDelay + period , তারপর initialDelay + 2 * পিরিয়ড , ইত্যাদি।

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                long initialDelay,
                                                long delay,
                                                TimeUnit unit);
একটি পুনরাবৃত্ত ক্রিয়া তৈরি করে এবং সঞ্চালন করে যা প্রথমে নির্দিষ্ট প্রাথমিক বিলম্বের পরে এবং তারপর আবার একটি সম্পাদনের সমাপ্তি এবং পরবর্তীটির শুরুর মধ্যে নির্দিষ্ট বিলম্বের সাথে সম্পাদন করে।

তাই ইন্টারফেসটি আমাদের নিয়মিত বিরতিতে বা কিছু বিলম্বের পরে কাজগুলি চালাতে দেয়।

newScheduledThreadPool পদ্ধতিতে আরও।

আমরা এটিকে বিভিন্ন উপায়ে কল করতে পারি:


newScheduledThreadPool(int corePoolSize)
corePoolSize হল পুলে রাখা থ্রেডের সংখ্যা, এমনকি যদি তারা নিষ্ক্রিয় থাকে।

newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)

corePoolSize হল পুলে রাখা থ্রেডের সংখ্যা, এমনকি যদি তারা নিষ্ক্রিয় থাকে।

threadFactory হল নতুন থ্রেড তৈরি করার সময় ব্যবহার করার কারখানা।

উভয় পদ্ধতিই একটি থ্রেড পুল তৈরি করবে যা একটি নির্দিষ্ট বিলম্বের পরে বা পর্যায়ক্রমে কার্যকর করার জন্য ক্রিয়া নির্ধারণ করতে পারে।

কিভাবে ScheduledThreadPool কাজ করে তা দেখতে একটি উদাহরণ দেখি ।

উদাহরণস্বরূপ, ধরুন আমাদের প্রতি 5 সেকেন্ডে ইমেল চেক করার একটি টাস্ক আছে, তবে এই চেকটি অবশ্যই মূল প্রোগ্রামকে প্রভাবিত করবে না এবং অতিরিক্ত সংস্থানগুলির সম্ভাব্য ব্যবহারকে অন্তর্ভুক্ত করবে।

আমাদের একটি টাস্ক ক্লাস আছে যা ইমেল চেক করার অনুকরণ করে।


public class Task implements Runnable {
   @Override
   public void run() {
       System.out.println("Checking email...");
   }
}

এর পরে, আমরা একটি থ্রেড পুল তৈরি করি এবং চেকের সময়সূচী করি।


ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);

আউটপুটে, প্রতি 5 সেকেন্ডে আমরা দেখতে পাই:

ইমেল চেক করা হচ্ছে...

সাধারণভাবে, আমরা উদাহরণের মতো পর্যায়ক্রমিক "হাউসকিপিং" কাজগুলি সম্পাদন করতে এই জাতীয় পুল ব্যবহার করতে পারি। গৃহস্থালির কাজগুলি হল এমন কাজ যা মূল প্রোগ্রাম যা করছে তা নির্বিশেষে সম্পাদন করতে হবে।