ExecutorService, ScheduledExecutorService এর ব্যবহার

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

333

FixedThreadPool এবং CachedThreadPool হল Java Concurrency এর ExecutorService ইন্টারফেসের দুটি গুরুত্বপূর্ণ থ্রেড পুল। এগুলো থ্রেড ম্যানেজমেন্ট আরও কার্যকর করতে ব্যবহৃত হয়।


১. FixedThreadPool

FixedThreadPool একটি নির্দিষ্ট সংখ্যক থ্রেড নিয়ে কাজ করে।

  • এটি আগে থেকে নির্ধারিত থ্রেড সংখ্যা পর্যন্ত কাজ করতে পারে।
  • নতুন টাস্ক এলে, বিদ্যমান থ্রেডগুলো ব্যস্ত থাকলে টাস্কগুলো একটি কিউতে অপেক্ষা করে।

উদাহরণ:

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

public class FixedThreadPoolExample {
    public static void main(String[] args) {
        // ১. FixedThreadPool তৈরি (3 থ্রেড)
        ExecutorService executor = Executors.newFixedThreadPool(3);

        for (int i = 1; i <= 10; i++) {
            final int taskId = i;
            executor.execute(() -> {
                System.out.println("Task " + taskId + " is running on thread " + Thread.currentThread().getName());
                try {
                    Thread.sleep(2000); // প্রতিটি টাস্ক ২ সেকেন্ড সময় নেয়
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

        // ExecutorService বন্ধ করুন
        executor.shutdown();
    }
}

আউটপুট:

  • এক সময়ে সর্বোচ্চ ৩টি টাস্ক চলবে।
  • নতুন টাস্কগুলো কিউতে অপেক্ষা করবে, যতক্ষণ না বিদ্যমান থ্রেড ফ্রি হয়।

২. CachedThreadPool

CachedThreadPool এর থ্রেড সংখ্যা ডায়নামিক।

  • যখন একটি নতুন টাস্ক আসে, এটি বিদ্যমান থ্রেড ব্যবহার করে; যদি না থাকে, নতুন থ্রেড তৈরি করে।
  • অব্যবহৃত থ্রেডগুলো একটি নির্দিষ্ট সময় পরে ধ্বংস হয়ে যায় (ডিফল্ট: ৬০ সেকেন্ড)।

উদাহরণ:

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

public class CachedThreadPoolExample {
    public static void main(String[] args) {
        // ১. CachedThreadPool তৈরি
        ExecutorService executor = Executors.newCachedThreadPool();

        for (int i = 1; i <= 10; i++) {
            final int taskId = i;
            executor.execute(() -> {
                System.out.println("Task " + taskId + " is running on thread " + Thread.currentThread().getName());
                try {
                    Thread.sleep(2000); // প্রতিটি টাস্ক ২ সেকেন্ড সময় নেয়
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

        // ExecutorService বন্ধ করুন
        executor.shutdown();
    }
}

আউটপুট:

  • একই সময়ে যত প্রয়োজন, তত থ্রেড তৈরি হবে।
  • কম টাস্ক থাকলে বিদ্যমান থ্রেড পুনরায় ব্যবহার হবে।

FixedThreadPool এবং CachedThreadPool এর তুলনা

প্যারামিটারFixedThreadPoolCachedThreadPool
থ্রেড সংখ্যানির্দিষ্ট (Fixed)ডায়নামিক (প্রয়োজন অনুযায়ী তৈরি এবং ধ্বংস)
কর্মক্ষমতা (Performance)কম টাস্ক থাকলে দ্রুত এবং নিয়ন্ত্রিতবেশি টাস্কে দ্রুত (প্রচুর থ্রেড তৈরি হতে পারে)
রিসোর্স ব্যবহারে নিয়ন্ত্রণথ্রেড সংখ্যা নিয়ন্ত্রিতরিসোর্স বেশি ব্যবহৃত হতে পারে
ব্যবহার ক্ষেত্রসীমিত এবং পূর্ব নির্ধারিত টাস্কডায়নামিক এবং অপ্রত্যাশিত টাস্ক

  • FixedThreadPool ব্যবহার করুন, যদি থ্রেড সংখ্যা পূর্বনির্ধারিত থাকে এবং সিস্টেম রিসোর্স নিয়ন্ত্রণে রাখতে চান।
  • CachedThreadPool ব্যবহার করুন, যদি টাস্ক সংখ্যা ডায়নামিক হয় এবং দ্রুত থ্রেড তৈরি করার প্রয়োজন হয়।

এই উদাহরণগুলো দেখে আপনি FixedThreadPool এবং CachedThreadPool এর কাজ এবং তাদের মধ্যে পার্থক্য বুঝতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...