থ্রেড কী এবং কেন দরকার

জাভা কনকারেন্সি - জাভা প্রোগ্রামিং (Java Programming) - Computer Programming

524

থ্রেড (Thread) হলো Java প্রোগ্রামিং ভাষার একটি কার্যপ্রণালী, যা প্রোগ্রামের ভিতরে ছোট ছোট সাব-প্রসেস তৈরি করে কাজ সম্পন্ন করতে সক্ষম। Java তে থ্রেড হলো একটি স্বতন্ত্র এক্সিকিউশন ইউনিট, অর্থাৎ এটি নিজস্ব একটি নির্দিষ্ট কাজ করতে পারে এবং প্রোগ্রামের মূল কাজের সাথে একযোগে (concurrently) চালিত হতে পারে।

Java তে Thread ক্লাস এবং Runnable ইন্টারফেস ব্যবহার করে থ্রেড তৈরি এবং পরিচালনা করা যায়।


কেন থ্রেড প্রয়োজন?

  1. প্যারালালিজম (Parallelism): থ্রেড ব্যবহার করে প্রোগ্রামের একাধিক কাজ একসাথে চালানো সম্ভব। উদাহরণস্বরূপ, একটি প্রোগ্রাম ফাইল ডাউনলোড এবং ইউজার ইন্টারফেস আপডেট একই সাথে করতে পারে।
  2. CPU এর সর্বোচ্চ ব্যবহার: থ্রেড ব্যবহারের মাধ্যমে কম্পিউটার প্রসেসরের বহুমুখী অংশগুলোর (cores) সর্বোচ্চ ব্যবহার করা যায়, যা প্রোগ্রামের গতি বাড়ায়।
  3. উচ্চ কার্যক্ষমতা (Performance): থ্রেডিং ব্যবহারের ফলে প্রোগ্রাম অপেক্ষাকৃত দ্রুততর কাজ করতে পারে, কারণ বিভিন্ন কাজ আলাদাভাবে পরিচালিত হয়।
  4. ব্যবহারকারী অভিজ্ঞতা উন্নত করা: থ্রেড ব্যবহার করে বড় এবং জটিল প্রোগ্রামগুলোর কাজ একযোগে সম্পন্ন করে, যাতে ব্যবহারকারীর জন্য প্রোগ্রাম আরও দ্রুত এবং ব্যবহার উপযোগী হয়।

থ্রেড কিভাবে কাজ করে?

Java তে Thread ক্লাস অথবা Runnable ইন্টারফেস ব্যবহার করে থ্রেড তৈরি করা যায়। start() মেথড ব্যবহার করে থ্রেড চালু করা হয়, যা থ্রেডের run() মেথডকে কল করে।

থ্রেডের প্রধান স্টেট বা অবস্থা

  1. New: থ্রেড তৈরি হয়েছে, কিন্তু শুরু হয়নি।
  2. Runnable: থ্রেড চালু হওয়ার জন্য প্রস্তুত আছে বা CPU সময়ের জন্য অপেক্ষা করছে।
  3. Blocked: থ্রেড চলমান নয় এবং এটি কোনো রিসোর্সের জন্য অপেক্ষা করছে।
  4. Waiting: থ্রেড চালু হয়নি এবং অন্য থ্রেডের সিগন্যালের জন্য অপেক্ষা করছে।
  5. Terminated: থ্রেডের কাজ শেষ হয়েছে।

থ্রেড তৈরি করার উপায়

১. Thread ক্লাস এক্সটেন্ড করে থ্রেড তৈরি

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - Count: " + i);
            try {
                Thread.sleep(500); // ৫০০ মিলিসেকেন্ডের জন্য থ্রেড থামানো
            } catch (InterruptedException e) {
                System.out.println("Thread interrupted: " + e.getMessage());
            }
        }
    }
}

public class ThreadExample {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();

        thread1.start(); // থ্রেড ১ শুরু
        thread2.start(); // থ্রেড ২ শুরু
    }
}

আউটপুট:

Thread-0 - Count: 1
Thread-1 - Count: 1
Thread-0 - Count: 2
Thread-1 - Count: 2
...

ব্যাখ্যা:

  • MyThread ক্লাসটি Thread ক্লাস এক্সটেন্ড করে তৈরি করা হয়েছে।
  • start() মেথড ব্যবহার করে thread1 এবং thread2 চালু করা হয়েছে, যা run() মেথডে সংজ্ঞায়িত কাজ সম্পন্ন করে।

২. Runnable ইন্টারফেস ইমপ্লিমেন্ট করে থ্রেড তৈরি

class MyRunnable implements Runnable {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - Count: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                System.out.println("Thread interrupted: " + e.getMessage());
            }
        }
    }
}

public class RunnableExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new MyRunnable());
        Thread thread2 = new Thread(new MyRunnable());

        thread1.start(); // থ্রেড ১ শুরু
        thread2.start(); // থ্রেড ২ শুরু
    }
}

ব্যাখ্যা:

  • MyRunnable ক্লাস Runnable ইন্টারফেস ইমপ্লিমেন্ট করে।
  • Thread ক্লাসের কন্সট্রাক্টরে MyRunnable পাস করা হয়েছে এবং start() মেথডের মাধ্যমে থ্রেডগুলো চালু করা হয়েছে।

থ্রেড সংক্রান্ত গুরুত্বপূর্ণ মেথড

  1. start(): থ্রেড শুরু করার জন্য ব্যবহৃত হয়, যা run() মেথড কল করে।
  2. run(): থ্রেড চালু হলে এর কার্যপ্রণালী সম্পাদন করে।
  3. sleep(long milliseconds): থ্রেডকে নির্দিষ্ট সময়ের জন্য থামানো হয়, যা InterruptedException থ্রো করতে পারে।
  4. join(): থ্রেড শেষ না হওয়া পর্যন্ত অন্য থ্রেডকে অপেক্ষা করানো হয়।
  5. yield(): বর্তমান থ্রেড সাময়িকভাবে CPU ছেড়ে দিয়ে অন্য থ্রেডকে সুযোগ দেয়।
  6. interrupt(): থ্রেডকে থামানোর জন্য সিগন্যাল প্রদান করা হয়।

উদাহরণ: join() মেথড ব্যবহার

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - Count: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                System.out.println("Thread interrupted: " + e.getMessage());
            }
        }
    }
}

public class JoinExample {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();

        thread1.start();
        try {
            thread1.join(); // থ্রেড ১ শেষ না হওয়া পর্যন্ত থ্রেড ২ অপেক্ষা করবে
        } catch (InterruptedException e) {
            System.out.println("Main thread interrupted: " + e.getMessage());
        }
        thread2.start();
    }
}

ব্যাখ্যা:

  • thread1.join() কল করার ফলে thread1 শেষ না হওয়া পর্যন্ত thread2 অপেক্ষা করবে।

থ্রেডের সুবিধা এবং সীমাবদ্ধতা

সুবিধা

  1. প্যারালাল প্রসেসিং: একাধিক কাজ একসাথে চালানো যায়।
  2. CPU ব্যবহার বৃদ্ধি: CPU-এর বিভিন্ন কোরে আলাদা থ্রেড পরিচালনা করা যায়।
  3. উচ্চ কার্যক্ষমতা: থ্রেডের মাধ্যমে বড় কাজ ছোট ছোট অংশে ভাগ করে দ্রুত কাজ সম্পন্ন করা যায়।
  4. ব্যবহারকারীর অভিজ্ঞতা উন্নত: থ্রেড ব্যবহার করে দীর্ঘমেয়াদী কাজের জন্য প্রোগ্রাম বন্ধ না করে ব্যাকগ্রাউন্ডে চালানো যায়।

সীমাবদ্ধতা

  1. কমপ্লেক্সিটি বৃদ্ধি: থ্রেড পরিচালনা জটিল এবং এটি সঠিকভাবে ব্যবহার না করলে ডেটা অসঙ্গতি ঘটতে পারে।
  2. ডেডলক (Deadlock): একাধিক থ্রেড একে অপরের জন্য অপেক্ষা করতে পারে, ফলে প্রোগ্রাম আটকে যেতে পারে।
  3. রিসোর্স ব্যবহারের সীমাবদ্ধতা: অতিরিক্ত থ্রেড ব্যবহারে মেমোরি ও প্রসেসিং পাওয়ার দ্রুত শেষ হয়ে যেতে পারে।

সারসংক্ষেপ

  • থ্রেড হলো প্রোগ্রামের একটি আলাদা এক্সিকিউশন ইউনিট, যা প্যারালাল কাজ সম্পাদন করতে ব্যবহৃত হয়।
  • Java তে থ্রেড তৈরি করতে Thread ক্লাস বা Runnable ইন্টারফেস ব্যবহার করা হয়।
  • থ্রেড ব্যবহারে প্যারালাল প্রসেসিং, উচ্চ কার্যক্ষমতা, এবং উন্নত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত হয়।
  • থ্রেড ব্যবহারে সতর্ক থাকতে হয়, কারণ ডেডলক এবং ডেটা অসঙ্গতি ঘটার ঝুঁকি থাকে।

থ্রেড ব্যবহার করে বড় ও জটিল প্রোগ্রামগুলোর কাজ দ্রুত এবং কার্যকরভাবে সম্পাদন করা সম্ভব, যা আধুনিক সফটওয়্যার ডেভেলপমেন্টে অত্যন্ত গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...