Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Thread Pools ใน Java

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");
    }
}