Thread Pool ব্যবহার করে Multithreading-এর কার্যক্ষমতা বৃদ্ধি করা হয়, যেখানে একাধিক থ্রেড একসাথে কাজ করে, কিন্তু একটি থ্রেড পুল ব্যবস্থাপনা করে থ্রেড তৈরি ও পরিচালনা করে। এর ফলে থ্রেডের অধিক ব্যবহার এবং রিসোর্সের অপচয় কমানো যায়।
নিচে একটি Thread Pool Example দেওয়া হলো যা ExecutorService এবং ExecutorService.submit() ব্যবহার করে থ্রেড পুল তৈরি এবং ব্যবহারের পদ্ধতি দেখাবে।
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// Thread Pool এর আকার ৩টি থ্রেডের জন্য নির্ধারণ করা হয়েছে
int numberOfThreads = 3;
ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
// Runnable টাস্ক তৈরি করা
Runnable task1 = new Task("Task 1");
Runnable task2 = new Task("Task 2");
Runnable task3 = new Task("Task 3");
Runnable task4 = new Task("Task 4");
// Thread Pool এ টাস্কগুলো সাবমিট করা
executorService.submit(task1);
executorService.submit(task2);
executorService.submit(task3);
executorService.submit(task4);
// Thread Pool বন্ধ করা
executorService.shutdown();
}
// Runnable ইন্টারফেস বাস্তবায়ন করা
static class Task implements Runnable {
private String taskName;
public Task(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
// প্রতিটি টাস্কের কাজ
try {
System.out.println(taskName + " শুরু হয়েছে, থ্রেড ID: " + Thread.currentThread().getId());
// কিছু সময় অপেক্ষা করা (সীমিত সময়ের জন্য)
Thread.sleep(2000);
System.out.println(taskName + " শেষ হয়েছে, থ্রেড ID: " + Thread.currentThread().getId());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Explanation:
- ExecutorService: এটি থ্রেড পুল তৈরি এবং পরিচালনার জন্য ব্যবহৃত হয়। এখানে,
Executors.newFixedThreadPool()ব্যবহার করে থ্রেড পুলের আকার ৩টি থ্রেড হিসাবে নির্ধারণ করা হয়েছে। অর্থাৎ একসময় তিনটি থ্রেড কাজ করতে পারবে। - Runnable Task:
Runnableইন্টারফেসেrun()মেথডের মধ্যে কাজের কোড থাকে। এখানে, প্রতিটিTaskক্লাসেরrun()মেথডে কিছু সময় অপেক্ষা (Thread.sleep()) এবং প্রিন্ট স্টেটমেন্ট দেওয়া হয়েছে যা প্রতিটি টাস্কের শুরু এবং শেষ সময় দেখায়। - submit() Method:
submit()মেথডের মাধ্যমে আমরা টাস্কগুলো থ্রেড পুলে জমা দিচ্ছি। এর ফলে, থ্রেড পুল অব্যাহতভাবে থ্রেডগুলোকে ব্যবহার করে টাস্কগুলো সম্পাদন করবে। - shutdown() Method:
shutdown()মেথড দিয়ে থ্রেড পুল বন্ধ করা হয়, অর্থাৎ কোন নতুন টাস্ক গ্রহণ করা হবে না, কিন্তু যেগুলো ইতিমধ্যে পুলে আছে সেগুলো সম্পন্ন হবে।
Output Example:
Task 1 শুরু হয়েছে, থ্রেড ID: 10
Task 2 শুরু হয়েছে, থ্রেড ID: 11
Task 3 শুরু হয়েছে, থ্রেড ID: 12
Task 1 শেষ হয়েছে, থ্রেড ID: 10
Task 2 শেষ হয়েছে, থ্রেড ID: 11
Task 3 শেষ হয়েছে, থ্রেড ID: 12
Task 4 শুরু হয়েছে, থ্রেড ID: 10
Task 4 শেষ হয়েছে, থ্রেড ID: 10
এখানে, টাস্কগুলি একাধিক থ্রেড দ্বারা প্রসেস করা হচ্ছে, এবং থ্রেড পুলের মাধ্যমে থ্রেডগুলোর পুনরায় ব্যবহার করা হচ্ছে, যার ফলে কার্যক্ষমতা বৃদ্ধি পাচ্ছে এবং নতুন থ্রেড তৈরির সময় এবং রিসোর্সের অপচয় কমানো হচ্ছে।
Read more