জাভায় 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
getState()মেথড ব্যবহার করে থ্রেডের বর্তমান অবস্থা দেখা যায়।- থ্রেড একবার Terminated হলে পুনরায় শুরু করা যায় না।
- Concurrency Issues এড়ানোর জন্য সঠিক Synchronization ব্যবহার করতে হবে।
এটি জাভা কনকারেন্সি এবং থ্রেড লাইফসাইকেলের একটি গুরুত্বপূর্ণ দৃষ্টান্ত!
Content added By
Read more