Hướng dẫn sử dụng Future trong Java
Bài viết này sẽ giúp bạn hiểu cách sử dụng `Future` trong Java để xử lý các tác vụ đồng thời. Giao diện `Future` đại diện cho kết quả của một phép tính bất đồng bộ.
Các bước thực hiện
| Bước | Mô tả |
|---|---|
| 1 | Tạo một lớp triển khai giao diện `Callable`. |
| 2 | Triển khai phương thức `call` của `Callable`. |
| 3 | Sử dụng `ExecutorService` để gửi nhiệm vụ `Callable`. |
| 4 | Gọi phương thức `get` của `Future` để lấy kết quả. |
Mã nguồn minh họa
Bước 1: Tạo lớp Callable
Tạo một lớp triển khai giao diện `Callable`. Lớp này sẽ chứa logic xử lý và trả về kết quả:
import java.util.concurrent.Callable;
public class TaskProcessor implements Callable<Integer> {
private final int inputNumber;
public TaskProcessor(int inputNumber) {
this.inputNumber = inputNumber;
}
@Override
public Integer call() throws Exception {
Thread.sleep(2000); // Giả lập hoạt động tốn thời gian
return inputNumber * 3; // Nhân giá trị đầu vào với 3
}
}
Bước 2: Sử dụng ExecutorService để gửi nhiệm vụ
Tiếp theo, sử dụng `ExecutorService` để gửi nhiệm vụ `Callable` đã tạo:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureDemo {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> futureResult = executor.submit(new TaskProcessor(5));
executor.shutdown();
}
}
Bước 3: Lấy kết quả từ Future
Sau khi nhiệm vụ được gửi, có thể lấy kết quả bằng cách gọi phương thức `get` của đối tượng `Future`:
try {
Integer resultValue = futureResult.get();
System.out.println("Kết quả: " + resultValue);
} catch (Exception e) {
System.err.println("Lỗi khi lấy kết quả: " + e.getMessage());
}
Với các bước trên, bạn đã có thể sử dụng `Future` trong Java để xử lý các tác vụ đồng thời một cách hiệu quả.