Thread pool เป็น คอลเลกชันของเธรดที่เริ่มต้นสร้างไว้ล่วงหน้า (pre-initialized threads) แนวคิดหลักของ thread pool คือ สร้างจำนวนเธรดที่กำหนดตอนเริ่มโปรแกรมและวางไว้ใน pool โดยเธรดเหล่านี้จะคอยรองาน เมื่อเซิร์ฟเวอร์ได้รับคำขอ จะปลุกเธรดจาก pool (ถ้ามีว่าง) และส่งงานให้ เธรดทำงานเสร็จแล้วจะกลับไปคอยใน pool อีกครั้ง หาก pool ไม่มีเธรดว่าง เซิร์ฟเวอร์จะรอจนกว่าจะมีเธรดว่าง
ประหยัดเวลาเพราะไม่ต้องสร้างเธรดใหม่ทุกครั้ง
ใช้ใน Servlet และ JSP ที่คอนเทนเนอร์สร้าง thread pool เพื่อประมวลผลคำขอ
ตัวอย่างโค้ด
EmployeeThread.java
import java.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(); // เรียกเมธอดที่ทำให้เธรดนอน 2 วินาที
System.out.println(Thread.currentThread().getName() + " (End)"); // พิมพ์ชื่อเธรด
}
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); // สร้าง pool 6 เธรด
for (int i = 0; i < 6; i++) {
Runnable worker = new EmployeeThread("" + i);
executor.execute(worker); // เรียก execute ของ ExecutorService
}
executor.shutdown();
while (!executor.isTerminated()) { }
System.out.println("Finished all the threads");
}
}