Thread Lifecycle এবং বিভিন্ন Thread State গুলো কী কী?

Multithreading এবং Concurrency - জাভা ইন্টারভিউ প্রশ্ন (Java Interview Questions) - Java Technologies

467

জাভায় থ্রেড পরিচালনা করার জন্য একটি নির্দিষ্ট Thread Lifecycle বা থ্রেডের জীবনচক্র রয়েছে, যার মধ্যে একটি থ্রেড বিভিন্ন State-এ চলে যেতে পারে। নিচে Thread Lifecycle এবং Thread States সম্পর্কে বিস্তারিত আলোচনা করা হলো:

1. Thread Lifecycle (থ্রেড জীবনচক্র)

থ্রেডের জীবনচক্রে থ্রেডের বিভিন্ন অবস্থান বা state রয়েছে, যা নির্ধারণ করে থ্রেডের অবস্থা কেমন। থ্রেডের Lifecycle কে সাধারণত পাঁচটি প্রধান স্টেজে ভাগ করা হয়:

  • New State (New/Not Started):
    • যখন একটি থ্রেড তৈরি করা হয় কিন্তু এখনও তা চালু হয়নি, তখন এটি New অবস্থায় থাকে।
    • এই অবস্থায়, থ্রেডটি প্রস্তুতি গ্রহণ করছে কিন্তু কাজ শুরু করেনি।
  • Runnable State (Ready to run):
    • Runnable অবস্থা হলো সেই অবস্থা যখন থ্রেডটি প্রস্তুত থাকে কাজ শুরু করার জন্য।
    • থ্রেডটি যখন run() মেথড কল করা হয় তখন এটি Runnable অবস্থায় চলে যায়।
    • তবে, থ্রেডটি কার্যকর হতে হতে CPU এর উপর নির্ভর করে, এবং কেবলমাত্র যখন CPU অ্যাক্সেস উপলব্ধ হবে, তখন থ্রেডটি রান করবে।
  • Blocked State:
    • Blocked অবস্থা হলো যখন থ্রেড একটি নির্দিষ্ট রিসোর্স (যেমন, I/O অপারেশন বা অন্য থ্রেডের জন্য লক) অ্যাক্সেস করার জন্য অপেক্ষা করছে।
    • এটি যখন synchronized ব্লক বা মেথড ব্যবহার করে কোনো রিসোর্স অ্যাক্সেস করার চেষ্টা করে এবং ঐ রিসোর্স অন্য থ্রেড দ্বারা ব্যস্ত থাকে তখন ব্লক হয়।
  • Waiting State:
    • Waiting অবস্থা হলো যখন একটি থ্রেড অন্য থ্রেডের সিগন্যাল বা নির্দিষ্ট সময়ের জন্য অপেক্ষা করছে।
    • থ্রেডটি Object.wait(), Thread.join(), বা Thread.sleep() মেথড কল করার পরে এই অবস্থায় চলে যায়।
  • Terminated State (Dead):
    • একটি থ্রেড Terminated অবস্থায় চলে যায় যখন তার কার্যক্রম সম্পূর্ণ হয় বা কোনো কারণে থ্রেডটি শেষ হয়ে যায়।
    • থ্রেডের কাজ শেষ হলে, এটি dead অবস্থায় চলে যায় এবং এর পর কোনো কাজ করতে সক্ষম হয় না।

2. Thread States (থ্রেড স্টেটস)

জাভাতে একটি থ্রেড মোট পাঁচটি ভিন্ন state এ থাকতে পারে:

1. New (Newborn State)

  • থ্রেড তৈরি হলে, এটি New state তে চলে যায়।
  • এই অবস্থায় থ্রেডটি run() মেথড কল করার জন্য প্রস্তুত থাকে, তবে এখনও চালু হয়নি।

    উদাহরণ:

    Thread t = new Thread();
    

2. Runnable (Ready to Run)

  • থ্রেড যখন start() মেথড কল করা হয়, তখন এটি Runnable অবস্থায় চলে যায়।
  • Runnable অবস্থায় থাকা থ্রেডটি CPU থেকে কার্যকর হতে পারে, তবে এটি CPU থেকে অ্যাক্সেস পাওয়ার জন্য অপেক্ষা করতে পারে।

    উদাহরণ:

    t.start();  // Now the thread moves to the Runnable state
    

3. Blocked

  • Blocked অবস্থায় থাকা থ্রেডগুলি অন্য থ্রেডের রিসোর্স (যেমন সিঙ্ক্রোনাইজড মেথড বা ব্লক) অ্যাক্সেসের জন্য অপেক্ষা করে।
  • এই অবস্থায় থ্রেড CPU তে থাকে না, বরং অন্য থ্রেড রিসোর্সের ব্যবহার শেষ হওয়ার অপেক্ষা করে।

    উদাহরণ:

    synchronized void method() {
        // method body
    }
    

4. Waiting

  • Waiting অবস্থায় থাকা থ্রেডগুলি অন্য থ্রেডের ইন্টারভেনশন বা নির্দিষ্ট সময়ের জন্য অপেক্ষা করে।
  • এটি Object.wait(), Thread.join(), অথবা Thread.sleep() মেথড ব্যবহার করলে ঘটে।

    উদাহরণ:

    synchronized (object) {
        object.wait();  // Thread goes into Waiting state
    }
    

5. Terminated (Dead)

  • Terminated অবস্থা হলো থ্রেডের শেষ অবস্থা, যখন থ্রেডের কার্যক্রম সম্পূর্ণ হয় বা থ্রেডটি কোনো কারণে মারা যায়।
  • থ্রেড একটি কাজ শেষ করার পরে, এটি আর পুনরায় কাজ শুরু করতে পারে না।

    উদাহরণ:

    // After the run() method completes, the thread enters Dead state.
    

3. Thread Life Cycle Diagram

নিচে একটি সাধারণ থ্রেড লাইফ সাইকেল ডায়াগ্রাম দেখানো হলো, যা থ্রেডের বিভিন্ন স্টেট এবং তাদের মধ্যে সম্পর্ক নির্দেশ করে:

   +-----------+
   |  New      | ------> Thread() is created
   +-----------+
          |
          v
   +-----------+
   | Runnable  | ------> thread.start() is called
   +-----------+
          |
          v
   +-----------+
   | Blocked   | ------> Thread is blocked waiting for resources
   +-----------+
          |
          v
   +-----------+
   | Waiting   | ------> Thread waits for a signal or time
   +-----------+
          |
          v
   +-----------+
   | Terminated| ------> Thread finishes execution
   +-----------+

4. Thread States Example

এখানে একটি সিম্পল থ্রেড লাইফ সাইকেল উদাহরণ দেওয়া হলো:

class MyThread extends Thread {
    public void run() {
        try {
            System.out.println("Thread is running");
            Thread.sleep(1000);  // Goes into Waiting state for 1 second
        } catch (InterruptedException e) {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        System.out.println("Thread state after creation: " + t1.getState());
        t1.start();  // Moves to Runnable state
        System.out.println("Thread state after starting: " + t1.getState());
    }
}

5. Summary of Thread States

StateDescription
NewThread is created but not started yet.
RunnableThread is ready to run, but it is waiting for CPU time.
BlockedThread is blocked waiting for a resource or lock.
WaitingThread is waiting for a specific condition or signal.
TerminatedThread has completed its task or was interrupted and is no longer running.

Java Thread Lifecycle এবং Thread States বুঝে গেলে, আপনি থ্রেড পরিচালনা করতে অনেক বেশি দক্ষ হবেন। থ্রেডের জীবনচক্রের প্রতিটি স্টেটের মধ্যে থ্রেড কিভাবে চলে এবং কিভাবে আপনি থ্রেডের আচরণ নিয়ন্ত্রণ করতে পারবেন, তা জানা আপনার জন্য গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...