Thread Lifecycle এবং তার ধাপ

Threads এবং Runnable Interface - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

324

জাভায় Thread Lifecycle হল একটি থ্রেডের বিভিন্ন অবস্থা বা ধাপ যা একটি থ্রেড তার জীবনকালে অতিক্রম করে। এটি Java Concurrency Model-এর গুরুত্বপূর্ণ একটি অংশ। জাভার java.lang.Thread ক্লাসের মাধ্যমে থ্রেড তৈরি এবং পরিচালনা করা হয়।


Thread Lifecycle-এর ধাপসমূহ

১. New (Created/Initial State)

  • একটি থ্রেড তৈরি করা হলে এটি New অবস্থায় থাকে।
  • থ্রেড অবজেক্ট তৈরি করা হয়, তবে এটি এখনো start() মেথড কল করা হয়নি।

উদাহরণ কোড:

Thread t = new Thread(() -> System.out.println("Thread is running"));
System.out.println("Thread created but not started.");

২. Runnable (Ready to Run)

  • start() মেথড কল করার পরে থ্রেড Runnable অবস্থায় যায়।
  • এই অবস্থায় থ্রেড রান করার জন্য প্রস্তুত থাকে, তবে এটি CPU-র দ্বারা শিডিউল করা হয়নি।

উদাহরণ কোড:

t.start(); // Thread is now in Runnable state.

৩. Running (Executing)

  • যখন সিপিইউ একটি থ্রেডকে এক্সিকিউট করার জন্য নির্বাচন করে, তখন এটি Running অবস্থায় যায়।
  • এটি আসলে কোড এক্সিকিউট করে।

উদাহরণ কোড:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running.");
    }
}
MyThread t = new MyThread();
t.start(); // Moves from Runnable to Running when scheduled by CPU.

৪. Blocked/Waiting/Timed Waiting

  • একটি থ্রেড কিছু সময়ের জন্য অপেক্ষা বা ব্লক অবস্থায় থাকতে পারে:
    • Blocked: অন্য থ্রেডের জন্য অপেক্ষা করা। যেমন: সিঙ্ক্রোনাইজড রিসোর্স।
    • Waiting: একটি থ্রেড নির্দিষ্ট সময়ের জন্য থেমে থাকে।
    • Timed Waiting: একটি নির্দিষ্ট সময়ের পরে থ্রেড পুনরায় Runnable অবস্থায় ফিরে আসে।

উদাহরণ কোড:

synchronized (lock) {
    lock.wait(); // Thread is now in Waiting state.
}

৫. Terminated (Dead State)

  • একটি থ্রেড একবার তার কাজ শেষ করলে এটি Terminated অবস্থায় যায়।
  • এই অবস্থায় থ্রেড পুনরায় শুরু করা যায় না।

উদাহরণ কোড:

public class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running.");
    }
}
MyThread t = new MyThread();
t.start(); // After completing, thread enters Terminated state.

Thread Lifecycle-এর অবস্থার মধ্যে রূপান্তর (State Transition)

  • New → Runnable: start() মেথড কল করলে।
  • Runnable → Running: CPU-র শিডিউলিং করলে।
  • Running → Blocked/Waiting: কোনো সিঙ্ক্রোনাইজড রিসোর্সের জন্য অপেক্ষা করলে।
  • Blocked/Waiting → Runnable: সিঙ্ক্রোনাইজড রিসোর্স পাওয়া গেলে বা অপেক্ষার সময় শেষ হলে।
  • Running → Terminated: কাজ শেষ হলে বা থ্রেড বন্ধ হলে।

Thread Lifecycle-এর চিত্র

          New
           ↓
       Runnable
           ↓
       Running
        ↙   ↘
   Waiting  Terminated

উদাহরণ: একটি পূর্ণাঙ্গ কোড

class MyThread extends Thread {
    public void run() {
        try {
            System.out.println("Thread is in Running state.");
            Thread.sleep(2000); // Moves to Timed Waiting state.
        } catch (InterruptedException e) {
            System.out.println("Thread interrupted.");
        }
        System.out.println("Thread execution completed.");
    }
}

public class ThreadLifecycleExample {
    public static void main(String[] args) {
        MyThread t = new MyThread();

        System.out.println("Thread state: " + t.getState()); // New
        t.start();

        System.out.println("Thread state after start: " + t.getState()); // Runnable
        try {
            Thread.sleep(1000);
            System.out.println("Thread state while sleeping: " + t.getState()); // Timed Waiting
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        try {
            t.join(); // Main thread waits for t to finish.
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Thread state after completion: " + t.getState()); // Terminated
    }
}

Key Points

  1. getState() মেথড ব্যবহার করে থ্রেডের বর্তমান অবস্থা দেখা যায়।
  2. থ্রেড একবার Terminated হলে পুনরায় শুরু করা যায় না।
  3. Concurrency Issues এড়ানোর জন্য সঠিক Synchronization ব্যবহার করতে হবে।

এটি জাভা কনকারেন্সি এবং থ্রেড লাইফসাইকেলের একটি গুরুত্বপূর্ণ দৃষ্টান্ত!

Content added By
Promotion

Are you sure to start over?

Loading...