জাভায় থ্রেড দুই প্রকার হতে পারে: Daemon Thread এবং User Thread। এই থ্রেডগুলো জাভা অ্যাপ্লিকেশনে ভিন্ন ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। নিচে তাদের পার্থক্য এবং ব্যবহারের ক্ষেত্রগুলো উল্লেখ করা হলো:
Daemon Thread
Daemon Thread হলো ব্যাকগ্রাউন্ড থ্রেড যা অ্যাপ্লিকেশনের মূল কার্যক্রমের জন্য নয় বরং সিস্টেম বা ব্যাকগ্রাউন্ড টাস্কের জন্য ব্যবহৃত হয়।
বৈশিষ্ট্য:
- ব্যাকগ্রাউন্ড টাস্ক:
- Daemon Thread প্রধানত ব্যাকগ্রাউন্ডে কাজ করে যেমন গার্বেজ কালেকশন বা লোকাল রিসোর্স ক্লিনআপ।
- জীবনচক্র:
- যখন সব User Thread শেষ হয়ে যায়, তখন Daemon Thread স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।
- নিম্ন অগ্রাধিকার:
- সাধারণত এর অগ্রাধিকার কম থাকে।
- ব্যবহার:
- গার্বেজ কালেকশন, টাইমার, মনিটরিং বা লজিংয়ের মত কাজের জন্য।
- নিয়মিত থ্রেডের উপর নির্ভরশীল:
- এটি শুধুমাত্র User Thread সক্রিয় থাকাকালীন কাজ করে।
User Thread
User Thread হলো প্রধান থ্রেড যা অ্যাপ্লিকেশনের মূল কার্যক্রম সম্পাদন করে। এটি অ্যাপ্লিকেশনের কাজ শেষ না হওয়া পর্যন্ত চলতে থাকে।
বৈশিষ্ট্য:
- প্রধান কার্যক্রম:
- User Thread অ্যাপ্লিকেশনের প্রধান কাজের জন্য দায়ী।
- জীবনচক্র:
- যতক্ষণ না সমস্ত User Thread শেষ হয়, ততক্ষণ JVM চলমান থাকে।
- উচ্চ অগ্রাধিকার:
- এর অগ্রাধিকার সাধারণত Daemon Thread থেকে বেশি।
- ব্যবহার:
- প্রধান লজিক, ডাটা প্রসেসিং, ইউজার ইন্টারঅ্যাকশন ইত্যাদির জন্য।
Daemon এবং User Thread এর পার্থক্য:
| বৈশিষ্ট্য | Daemon Thread | User Thread |
|---|---|---|
| উদ্দেশ্য | ব্যাকগ্রাউন্ড কাজ | অ্যাপ্লিকেশনের প্রধান কাজ |
| জীবনচক্র | User Thread এর উপর নির্ভরশীল | স্বতন্ত্রভাবে সম্পূর্ণ হয় |
| অগ্রাধিকার | নিম্ন | উচ্চ |
| JVM এর আচরণ | সব User Thread শেষ হলে বন্ধ হয় | সব User Thread চলাকালীন JVM চলে |
| ব্যবহার | গার্বেজ কালেকশন, মনিটরিং ইত্যাদি | অ্যাপ্লিকেশনের লজিকাল কাজ |
Daemon এবং User Thread ব্যবহার সম্পর্কিত উদাহরণ
Daemon Thread উদাহরণ:
class DaemonThreadExample extends Thread {
public void run() {
while (true) {
System.out.println("Daemon Thread is running...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println("Daemon Thread interrupted");
}
}
}
public static void main(String[] args) {
DaemonThreadExample daemonThread = new DaemonThreadExample();
daemonThread.setDaemon(true); // থ্রেডটিকে Daemon হিসেবে সেট করুন
daemonThread.start();
System.out.println("Main thread is running...");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread is finished!");
}
}
আউটপুট:
Main thread is running...
Daemon Thread is running...
Daemon Thread is running...
Main thread is finished!
ব্যাখ্যা: Main Thread শেষ হলে Daemon Thread স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।
User Thread উদাহরণ:
class UserThreadExample extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("User Thread is running... " + i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println("User Thread interrupted");
}
}
System.out.println("User Thread is finished!");
}
public static void main(String[] args) {
UserThreadExample userThread = new UserThreadExample();
userThread.start();
System.out.println("Main thread is finished!");
}
}
আউটপুট:
Main thread is finished!
User Thread is running... 1
User Thread is running... 2
User Thread is running... 3
User Thread is running... 4
User Thread is running... 5
User Thread is finished!
ব্যাখ্যা: User Thread শেষ না হওয়া পর্যন্ত JVM চলতে থাকে।
Daemon এবং User Thread এর গুরুত্বপূর্ণ দিক
- Daemon Thread কখনো গুরুত্বপূর্ণ ডাটা প্রসেসিং বা লজিকাল কাজের জন্য ব্যবহার করবেন না।
- User Thread দিয়ে অ্যাপ্লিকেশনের প্রধান কার্যক্রম সম্পন্ন করতে হবে।
- setDaemon(true) পদ্ধতি ব্যবহার করে একটি থ্রেড Daemon হিসাবে সেট করা যায়। তবে, এটি থ্রেড শুরু করার আগে সেট করতে হবে।
সারাংশ:
Daemon Thread এবং User Thread তাদের কাজ এবং জীবনের ক্ষেত্রে সম্পূর্ণ আলাদা। User Thread অ্যাপ্লিকেশনের মূল কার্যক্রম সম্পন্ন করে, যেখানে Daemon Thread সিস্টেমের ব্যাকগ্রাউন্ড কাজের জন্য ব্যবহার হয়।
Read more