×

Executor Framework trong Java là gì?

Executor Framework trong Java là một framework mạnh mẽ được giới thiệu trong Java 5 như một phần của gói java.util.concurrent, được thiết kế để quản lý và kiểm soát việc thực thi các tác vụ đa luồng một cách dễ dàng và hiệu quả hơn. Framework này cung cấp một cách để tách biệt việc tạo và quản lý luồng khỏi logic của các tác vụ mà các luồng đó thực hiện, cho phép lập trình viên tập trung vào nhiệm vụ chính thay vì lo lắng về các vấn đề quản lý luồng.

Thành phần chính của Executor Framework:

  1. Executor Interface: Là interface cơ bản nhất trong Executor Framework, định nghĩa một phương thức execute(Runnable command) để thực thi tác vụ Runnable được cung cấp.

  2. ExecutorService Interface: Là một sub-interface của Executor, cung cấp các dịch vụ quản lý vòng đời của các tác vụ và executor, bao gồm phương thức để tắt executor và để submit các Callable tasks, cho phép trả về kết quả hoặc tương lai (Future).

  3. ScheduledExecutorService Interface: Mở rộng từ ExecutorService, cung cấp khả năng lên lịch thực thi các tác vụ định kỳ hoặc với độ trễ.

  4. ThreadPoolExecutor Class và ScheduledThreadPoolExecutor Class: Cung cấp triển khai cụ thể của ExecutorServiceScheduledExecutorService, cho phép quản lý một pool của các luồng để tái sử dụng chúng cho các tác vụ.

  5. Future Interface: Đại diện cho kết quả của một tác vụ không đồng bộ, cho phép bạn kiểm tra xem tác vụ đã hoàn thành chưa, chờ đợi tác vụ hoàn thành và lấy kết quả trả về của tác vụ.

Ví dụ sử dụng ExecutorService:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorExample {
    public static void main(String[] args) {
        // Tạo một ExecutorService với một pool gồm 5 luồng
        ExecutorService executor = Executors.newFixedThreadPool(5);

        for (int i = 0; i < 10; i++) {
            Runnable worker = new WorkerThread("" + i);
            executor.execute(worker); // Submit các tác vụ để thực thi
        }

        executor.shutdown(); // Tắt ExecutorService sau khi tất cả tác vụ đã được submit

        while (!executor.isTerminated()) {
            // Chờ đợi cho đến khi tất cả tác vụ hoàn thành
        }

        System.out.println("Finished all threads");
    }
}

class WorkerThread implements Runnable {
    private String command;

    public WorkerThread(String command) {
        this.command = command;
    }

    public void run() {
        System.out.println(Thread.currentThread().getName() + " Start. Command = " + command);
        processCommand();
        System.out.println(Thread.currentThread().getName() + " End.");
    }

    private void processCommand() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Executor Framework giúp đơn giản hóa việc lập trình đa luồng, cải thiện hiệu suất và khả năng mở rộng của ứng dụng bằng cách quản lý số lượng luồng và tái sử dụng chúng một cách hiệu quả.

Comments