Thread pool trong java đại diện cho một nhóm các luồng đang chờ đợi công việc và tái sử dụng nhiều lần.
Trong trường hợp thread pool, một nhóm các thread có kích thước cố định được tạo ra. Một thread từ thread pool được kéo ra và được service provider phân công một công việc. Sau khi hoàn thành công việc, thread đó được chứa trong thread pool một lần nữa.
Ưu điểm của Thread Pool trong java
Hiệu năng tốt hơn: Tiết kiệm thời gian vì không cần phải tạo thread mới.
Sử dụng thời gian thực
Nó được sử dụng trong Servlet và JSP, nơi container tạo một thread pool để xử lý các yêu cầu.
Nội dung chính
Ví dụ về Thread Pool trong java
Dưới đây một ví dụ đơn giản về thread pool trong java sử dụng ExecutorService và Executors.
File: WorkerThread.java
public class WorkerThread implements Runnable { private String message; public WorkerThread(String s) { this.message = s; } public void run() { System.out.println(Thread.currentThread().getName() + " (Start) message = " + message); processMessage(); System.out.println(Thread.currentThread().getName() + " (End)"); } private void processMessage() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
File: TestThreadPool.java
public class TestThreadPool { public static void main(String[] args) { // tạo một pool chứa 5 threads ExecutorService executor = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { Runnable worker = new WorkerThread("" + i); // call phương thức execute của ExecutorService executor.execute(worker); } executor.shutdown(); while (!executor.isTerminated()) { } System.out.println("Finished all threads"); } }
Output:
pool-1-thread-1 (Start) message = 0 pool-1-thread-5 (Start) message = 4 pool-1-thread-4 (Start) message = 3 pool-1-thread-3 (Start) message = 2 pool-1-thread-2 (Start) message = 1 pool-1-thread-1 (End) pool-1-thread-3 (End) pool-1-thread-2 (End) pool-1-thread-5 (End) pool-1-thread-5 (Start) message = 6 pool-1-thread-2 (Start) message = 7 pool-1-thread-1 (Start) message = 8 pool-1-thread-4 (End) pool-1-thread-3 (Start) message = 5 pool-1-thread-4 (Start) message = 9 pool-1-thread-2 (End) pool-1-thread-4 (End) pool-1-thread-3 (End) pool-1-thread-5 (End) pool-1-thread-1 (End) Finished all threads