একটি থ্রেড পুল হল প্রাক-প্রাথমিক থ্রেডের একটি সংগ্রহ। একটি থ্রেড পুলের পিছনে সাধারণ পরিকল্পনা হল মেথড স্টার্টআপে বিভিন্ন ধরণের থ্রেড তৈরি করা এবং সেগুলিকে একটি পুলে স্থাপন করা, যেখানেই তারা বসে কাজ আশা করে৷ একবার একটি সার্ভার অংশগ্রহণের জন্য একটি কল পেলে, এটি এই পুল থেকে একটি থ্রেড জাগিয়ে তোলে-যদি একটি উপলব্ধ থাকে-এবং এটি পরিষেবার জন্য অনুরোধটি পাস করে। একবার থ্রেডটি তার পরিষেবা সম্পূর্ণ করে, এটি পুলে ফিরে আসে এবং অনেক কাজের জন্য অপেক্ষা করে। যদি পুলটিতে কোনও অ্যাক্সেসযোগ্য থ্রেড না থাকে তবে সার্ভারটি একটি বিনামূল্যে না হওয়া পর্যন্ত অপেক্ষা করে৷
নতুন থ্রেড তৈরি করার প্রয়োজন নেই বলে এটি সময় বাঁচায়।
এটি Servlet এবং JSP-তে ব্যবহার করা হয় যেখানেই যন্ত্রানুযায়ী অনুরোধের পদ্ধতির জন্য একটি থ্রেড পুল তৈরি করে।
উদাহরণ
EmployeeThread.java
importjava.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class EmployeeThread implements Runnable { private String message; public EmployeeThread(String s) { this.message=s; } public void run() { System.out.println(Thread.currentThread().getName()+" (Start) message = "+message); processmessage();//call processmessage method that sleeps the thread for 2 seconds System.out.println(Thread.currentThread().getName()+" (End)");//prints thread name } private void processmessage() { try { Thread.sleep(1000); } catch (InterruptedException e){ e.printStackTrace(); } } }
ExampleThreadPool.java
public class implementThreadPool { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(6); //creating a pool of 6 threads for (int m = 0; m< 6; m++) { Runnable worker = new EmployeeThread("" + i); executor.execute(worker); //calling execute method of ExecutorService } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all the threads"); } }