Executor Framework এর ধারণা

Java Executor Framework - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

398

Executor Framework হল জাভার একটি শক্তিশালী টুল যা মাল্টি-থ্রেডেড প্রোগ্রামিং সহজ করে। এটি java.util.concurrent প্যাকেজে অন্তর্ভুক্ত এবং থ্রেড তৈরি, শিডিউলিং, এবং ব্যবস্থাপনার জন্য উন্নত API সরবরাহ করে। Executor Framework ম্যানুয়াল থ্রেড ম্যানেজমেন্টের তুলনায় আরও দক্ষ ও নির্ভরযোগ্য।


Executor Framework-এর ভূমিকা

মাল্টি-থ্রেডিং প্রোগ্রামে সরাসরি Thread ক্লাস ব্যবহার করে নতুন থ্রেড তৈরি করা জটিল হতে পারে। Executor Framework এ কাজের জন্য থ্রেড তৈরির পরিবর্তে একটি থ্রেড পুল ব্যবহার করা হয়, যা নিম্নলিখিত সুবিধা প্রদান করে:

  1. থ্রেড রিসাইক্লিং: বিদ্যমান থ্রেড পুনরায় ব্যবহার করে।
  2. পারফরম্যান্স বৃদ্ধি: থ্রেড তৈরির ও ব্যবস্থাপনার ওভারহেড কমায়।
  3. কনকারেন্সি নিয়ন্ত্রণ: কাজের শিডিউলিং এবং এক্সিকিউশন সহজ করে।
  4. স্কেলেবিলিটি: সিস্টেমের ক্ষমতা অনুযায়ী থ্রেড পুল ম্যানেজ করা যায়।

Executor Framework-এর মৌলিক গঠন

Executor Framework তিনটি মূল ইন্টারফেস নিয়ে গঠিত:

  1. Executor:
    • বেসিক ইন্টারফেস, যা execute() মেথড সরবরাহ করে।
    • উদাহরণ:

      Executor executor = Runnable::run;
      executor.execute(() -> System.out.println("Task executed"));
      
  2. ExecutorService:
    • Executor এর একটি সাবইন্টারফেস যা থ্রেড পুল পরিচালনার জন্য অতিরিক্ত সুবিধা দেয়। এটি submit() এবং shutdown() এর মতো মেথড প্রদান করে।
    • উদাহরণ:

      ExecutorService executorService = Executors.newFixedThreadPool(3);
      executorService.submit(() -> System.out.println("Task submitted"));
      executorService.shutdown();
      
  3. ScheduledExecutorService:
    • নির্দিষ্ট সময় বা সময়সূচি অনুযায়ী টাস্ক চালানোর জন্য ব্যবহৃত হয়।
    • উদাহরণ:

      ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
      scheduler.schedule(() -> System.out.println("Task executed after delay"), 3, TimeUnit.SECONDS);
      scheduler.shutdown();
      

Executor Framework-এর ক্লাস এবং মেথড

Executor Framework ব্যবহার করার জন্য জাভা কিছু স্ট্যাটিক মেথড এবং ক্লাস সরবরাহ করে। এর মধ্যে উল্লেখযোগ্য:

  1. Executors Class:
    • থ্রেড পুল তৈরি করতে সাহায্য করে।
    • প্রধান মেথড:
      • newFixedThreadPool(int nThreads): একটি নির্দিষ্ট সংখ্যা থ্রেড পুল তৈরি করে।
      • newCachedThreadPool(): একটি ডায়নামিক থ্রেড পুল তৈরি করে।
      • newSingleThreadExecutor(): একক থ্রেডের পুল তৈরি করে।
      • newScheduledThreadPool(int corePoolSize): সময়সূচি অনুযায়ী টাস্ক পরিচালনা করে।

Executor Framework-এর উদাহরণ

১. Fixed Thread Pool ব্যবহার করে Executor Service

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FixedThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(3);

        for (int i = 1; i <= 5; i++) {
            int taskId = i;
            executor.submit(() -> {
                System.out.println("Task " + taskId + " is running on thread: " + Thread.currentThread().getName());
            });
        }

        executor.shutdown();
    }
}

আউটপুট (সম্ভাব্য):

Task 1 is running on thread: pool-1-thread-1
Task 2 is running on thread: pool-1-thread-2
Task 3 is running on thread: pool-1-thread-3
Task 4 is running on thread: pool-1-thread-1
Task 5 is running on thread: pool-1-thread-2

২. Cached Thread Pool উদাহরণ

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CachedThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newCachedThreadPool();

        for (int i = 1; i <= 5; i++) {
            int taskId = i;
            executor.submit(() -> {
                System.out.println("Task " + taskId + " is running on thread: " + Thread.currentThread().getName());
            });
        }

        executor.shutdown();
    }
}

৩. Scheduled Executor Service উদাহরণ

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);

        scheduler.schedule(() -> System.out.println("Task executed after 5 seconds"), 5, TimeUnit.SECONDS);

        scheduler.scheduleAtFixedRate(() -> System.out.println("Periodic Task"), 1, 3, TimeUnit.SECONDS);

        scheduler.scheduleWithFixedDelay(() -> System.out.println("Task with delay"), 1, 2, TimeUnit.SECONDS);

        try {
            Thread.sleep(10000); // Wait for 10 seconds to observe tasks
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        scheduler.shutdown();
    }
}

Executor Framework ব্যবহারের সুবিধা

  1. সহজ থ্রেড ম্যানেজমেন্ট: নতুন থ্রেড তৈরির ঝামেলা দূর করে।
  2. দক্ষতা বৃদ্ধি: CPU এবং মেমরি ব্যবহারের দক্ষতা বাড়ায়।
  3. রিসোর্স ম্যানেজমেন্ট: থ্রেড পুলের আকার এবং টাইমআউট নির্ধারণ করার সুবিধা দেয়।
  4. সময়সূচি ব্যবস্থাপনা: নির্দিষ্ট সময় বা নির্দিষ্ট বিরতিতে কাজ চালানোর সুযোগ দেয়।

সেরা অনুশীলন

  1. shutdown() ব্যবহার করুন: Executor Service শেষ হওয়ার পরে এটি বন্ধ করুন।
  2. ঠিকঠাক থ্রেড পুল নির্বাচন করুন: অ্যাপ্লিকেশনের প্রয়োজন অনুসারে FixedThreadPool, CachedThreadPool বা ScheduledThreadPool ব্যবহার করুন।
  3. Exception Handling: থ্রেডের মধ্যে এক্সেপশন ম্যানেজ করুন।
  4. Overload এড়ান: থ্রেড পুলে অত্যধিক কাজ পাঠানোর আগে তার আকার সীমিত রাখুন।

Executor Framework মাল্টি-থ্রেডেড প্রোগ্রামিংয়ের জটিলতা অনেকাংশে দূর করে এবং স্কেলেবল এবং দক্ষ অ্যাপ্লিকেশন তৈরির জন্য একটি শক্তিশালী টুলসেট সরবরাহ করে। এটি জাভা প্রোগ্রামিংয়ে কনকারেন্সি সহজ ও আরও কার্যকর করে।

Content added By
Promotion

Are you sure to start over?

Loading...