জাভা ভাচুয়াল মেশিন চালু হওয়ার পর কতগুলাে থ্রেড তৈরি হয়। এর মধ্যে মেইন থ্রেড আমাদের কোডগুলো এক্সিকিউট করে। মেইন থ্রেড থেকে আমরা আরও একাধিক থ্রেড তৈরি করতে পারি। যতক্ষণ পর্যন্ত এই থ্রেডগুলো চলতে থাকে, ততক্ষন পর্যন্ত জাভা ভার্চুয়াল মেশিন চলতে থাকে। তবে অনেক সময় কোনো প্রোগ্রামের একটি প্রধান থ্রেডের সঙ্গে আরও কতগুলো থ্রেড তৈরি করতে হয়, যেগুলো বিভিন্ন সহায়ক কাজ করতে থাকে, কিন্তু প্রধান থ্রেডটি বন্ধ হয়ে গেলে এই সহায়ক থ্রেডগুলো প্রয়োজন নেই। এই সহায়ক থ্রেডগুলোকে ডিমন থ্রেড হিসেবে তৈরি করা যায়। জাভা দুই ধরণের থ্রেড তৈরি করা যায়। ১. সাধারণ থ্রেড ২. ডিমন থ্রেড জাভা ভার্চুয়াল মেশিনে কোনো সাধারণ থ্রেড না থাকলে এটি বন্ধ হয়ে যায়। অর্থাৎ একটি সাধারণ থ্রেড চলতে থাকলেও জাভা ভার্চুয়ার মেশিন চলতে থাকবে। ডিমন থ্রেড তৈরি করার জন্য আলাদা কোনো নিয়ম নেই। এটি সাধারণ থ্রেডের মতো করেই তৈরি করা যায়। তবে এতে শুধুমাত্র একটি ফ্ল্যাগ পরিবর্তন করতে হয়। এটি হলো – `Thread thread = new Thread();
thread.setDaemon(true);` এই setDaemon() মেথডটি কল করে এতে অার্গুমেন্ট হিসেবে true দিলেই থ্রেডটি ডিমন থ্রেড হিসেবে গণ্য হবে। তবে এই মেথডটি অবশ্যই থ্রেড শুরু করার আগে কল করতে হবে।
import java.util.concurrent.TimeUnit;
public class DemonThreadExample {
public static void main(String\[\] args) {
Thread t1 = new Thread(() -> {
while (true) {
System.out.println("I'm a demon thread and I'm running!");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new AssertionError(e);
}
}
});
t1.setDaemon(true);
t1.start();
System.out.println("Main Thread! is running!");
try {
TimeUnit.MINUTES.sleep(1);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new AssertionError(e);
}
System.out.println("Main thread! still running!");
System.out.println("Main Thread is going to stop now!");
}
}
এই প্রোগ্রামটিতে প্রথমে আমরা একটি থ্রেড তৈরি করেছি। একে ডিমন থ্রেড হিসেবে চিহ্নিত করেছি। এর পর মেইন থ্রেডকে ১ মিনিটের জন্য বন্ধ করে রেখেছি। এই সময় ডিমন থ্রেডটি চলতে থাকবে। মেইন থ্রেডের কাজ শেষ হওয়ার সঙ্গে সঙ্গে ডিমন থ্রেডটিও বন্ধ হয়ে যাবে। এখানে একটি বিষয় লক্ষ্য রাখতে হবে যে, কেনো ডিমন থ্রেড থেকে আরেকটি নতুন ডিমন থ্রেড চালু করলে সেটিও একটি ডিমন থ্রেড হবে। অর্থাৎ প্যারেন্ট থ্রেড যদি ডিমন হয়, চাইল্ড থ্রেডও ডিমন হবে। এক্ষেত্রে যেহেতু মেইন থ্রেড একটি সাধারণ থ্রেড, তাই মেইন থ্রেড থেকে যে থ্রেডগুলো তৈরি করা হয় সবগুলোই সাধারণ থ্রেড যদি না আলাদাভাবে ডিমন হিসেবে তৈরি করা হয়।