নির্বাহক

এক্সিকিউটর হল ক্লাসগুলির জন্য বেস ইন্টারফেস যা রানেবল টাস্কগুলিচালু করেএটি একটি টাস্ক যোগ করতে এবং এটি কিভাবে শুরু করতে হয় তা সহায়তা প্রদান করে।

এক্সিকিউটরসার্ভিস হল একটি ইন্টারফেস যা এক্সিকিউটরের বৈশিষ্ট্যগুলিকে প্রসারিত করেএবং যা রানযোগ্য বা কলযোগ্য কাজগুলি চালানোর জন্য একটি পরিষেবা বর্ণনা করে। জমা দেওয়ার পদ্ধতিগুলি ইনপুট হিসাবে একটি কলযোগ্য বা রানযোগ্য আকারে একটি টাস্ক গ্রহণ করেএবং একটি ফিউচার একটি রিটার্ন মান হিসাবে ব্যবহৃত হয়, যার মাধ্যমে আপনি ফলাফল পেতে পারেন।

invokeAll পদ্ধতিটি কার্য সম্পাদনের জন্য দায়ী, তাদের স্থিতি এবং সমাপ্তির ফলাফল সহ কার্যগুলির একটি তালিকা ফেরত দেয়।

invokeAny পদ্ধতিটি কার্য সম্পাদনের জন্য দায়ী, একটি সফলভাবে সম্পন্ন করা টাস্কের ফলাফল ফেরত দেয় (অর্থাৎ, একটি ব্যতিক্রম ছাড়াই), যদি থাকে।

ScheduledExecutorService - এই ইন্টারফেস একটি নির্দিষ্ট বিলম্ব বা একটি নির্দিষ্ট সময়ের সাথে মুলতুবি কাজগুলি চালানোর ক্ষমতা যোগ করে।

AbstractExecutorService হল একটি ExecutorService 'aনির্মাণের জন্য একটি বিমূর্ত শ্রেণীভিতরে সাবমিট , ইনভোকঅল , ইনভোক অ্যানি পদ্ধতির বাস্তবায়ন রয়েছে। এই শ্রেণীটি ThreadPoolExecutor , ScheduledThreadPoolExecutor এবং ForkJoinPool উত্তরাধিকার সূত্রে প্রাপ্ত ।

public static void main(String[] args) {
   ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
   Callable<String> task = () -> {
       System.out.println(Thread.currentThread().getName());
       return Thread.currentThread().getName();
   };
   scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
   scheduledExecutorService.shutdown();
}

থ্রেডপুল এক্সিকিউটর

Executors হল ThreadPoolExecutor , ScheduledThreadPoolExecutor তৈরির জন্য একটি ফ্যাক্টরি ক্লাস। আপনি যদি এই পুলগুলির মধ্যে একটি তৈরি করতে চান তবে এই কারখানাটি আপনার যা প্রয়োজন তা ঠিক। এটিতে বিভিন্ন অ্যাডাপ্টার রয়েছে যা Runnable-Callable, PrivilegedAction-Callable, PrivilegedExceptionAction-Callable এবং অন্যান্য। বিভিন্ন ThreadPool তৈরি করার জন্য স্ট্যাটিক পদ্ধতি আছে।

থ্রেডপুলএক্সিকিউটর - এক্সিকিউটর এবং এক্সিকিউটরসার্ভিস ইন্টারফেসগুলি প্রয়োগ করে এবং টাস্ক তৈরিকে টাস্ক এক্সিকিউশন থেকে আলাদা করে। আমাদের রানেবল অবজেক্ট বাস্তবায়ন করতে হবে এবং সেগুলিকে নির্বাহকের কাছে পাঠাতে হবে, এবং ThreadPoolExecutor তাদের সম্পাদন, ইনস্ট্যান্টেশন এবং থ্রেডগুলির সাথে কাজ করার জন্য দায়ী।

ScheduledThreadPoolExecutor - ThreadPoolExecutor পদ্ধতিগুলি ছাড়াও, এটি থ্রেডগুলির একটি পুল তৈরি করে যা নির্দিষ্ট বিলম্বের পরে বা পর্যায়ক্রমিক সম্পাদনের জন্য আদেশগুলি নির্ধারন করতে পারে।

থ্রেড ফ্যাক্টরিএকটি বস্তু যা চাহিদা অনুযায়ী নতুন থ্রেড তৈরি করে। আমাদের Executors.newSingleThreadExecutor(ThreadFactory threadFactory) পদ্ধতিতে একটি উদাহরণ পাস করতে হবে ।

ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
 @Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
 return thread; }
 });

RejectedExecutionHandler - আপনাকে এমন কাজের জন্য একটি হ্যান্ডলারকে সংজ্ঞায়িত করতে দেয় যা কিছু কারণে ThreadPoolExecutor এর মাধ্যমে কার্যকর করা যায় না । এটি ঘটে যখন কোনও বিনামূল্যের স্ট্রিম না থাকে বা পরিষেবাটি বন্ধ বা বন্ধ হয়ে যায়।

ThreadPoolExecutor ক্লাসে বেশ কিছু স্ট্যান্ডার্ড বাস্তবায়ন পাওয়া যায় :

  • CallerRunsPolicy - কলিং থ্রেডে একটি টাস্ক চালায়;
  • AbortPolicy - একটি ব্যতিক্রম নিক্ষেপ;
  • DiscardPolicy - টাস্ক উপেক্ষা করে;
  • DiscardOldestPolicy - সারি থেকে পুরানো অপ্রচলিত টাস্কটি সরিয়ে দেয়, তারপর আবার একটি নতুন টাস্ক যোগ করার চেষ্টা করে।

সমাপ্তি পরিষেবা

CompletionService হল একটি পরিষেবা ইন্টারফেস যেখানে অ্যাসিঙ্ক্রোনাস টাস্কগুলি চালু করা এবং ফলাফল পাওয়ার ডিকপলিং। কাজগুলি যোগ করার জন্য, একটি সাবমিটপদ্ধতিএবং ইতিমধ্যে সম্পন্ন করা কাজগুলির ফলাফল পেতে, একটি ব্লকিংটেকএবং একটি নন-ব্লকিংপোল

ExecutorCompletionService হল যে কোনো ক্লাসের উপর একটি মোড়ক যা এক্সিকিউটর ইন্টারফেস প্রয়োগ করে , যেমন ThreadPoolExecutor বা ForkJoinPool । এটি ব্যবহার করা হয় যখন কাজগুলি চালু করার এবং তাদের সম্পাদন নিয়ন্ত্রণ করার পদ্ধতি থেকে বিমূর্ত করার প্রয়োজন হয়।

যদি কাজগুলি সম্পন্ন হয় তবে আমরা সেগুলি বের করে দিই। যদি কোন কাজ না থাকে, তাহলে কিছু সম্পন্ন না হওয়া পর্যন্ত আমরা আটকে থাকি। পরিষেবাটি তার মূল অংশে একটি LinkedBlockingQueue ব্যবহার করে, কিন্তু আপনি যেকোনো BlockingQueue বাস্তবায়নে পাস করতে পারেন।