6.1 Đối tượng thực thi
Vì vậy, chúng tôi đã đến phần lớn nhất của gói. Nó sẽ mô tả các giao diện để chạy các tác vụ không đồng bộ với khả năng thu được kết quả thông qua các giao diện Tương lai và Có thể gọi được, cũng như các dịch vụ và nhà máy để tạo nhóm luồng: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
Để hiểu rõ hơn, chúng ta hãy phân tích một chút về giao diện và lớp.
![](https://cdn.codegym.cc/images/article/531332d5-b6f9-4da3-a528-e4ce9c7a8c91/1024.jpeg)
6.2 Hiện thực hóa các đối tượng thực thi
Future<V>
là một giao diện tuyệt vời để nhận kết quả của hoạt động không đồng bộ. Phương thức quan trọng ở đây là phương thức get, chặn luồng hiện tại (có hoặc không có thời gian chờ) cho đến khi hoạt động không đồng bộ trên luồng khác hoàn tất. Ngoài ra còn có các phương pháp bổ sung để hủy thao tác và kiểm tra trạng thái hiện tại. Lớp FutureTask thường được sử dụng làm triển khai.
RunnableFuture<V>
- nếu Future là một giao diện cho Client API, thì giao diện RunnableFuture đã được sử dụng để bắt đầu phần không đồng bộ. Việc hoàn thành thành công phương thức run() sẽ kết thúc hoạt động không đồng bộ và cho phép truy xuất kết quả thông qua phương thức get.
Callable<V>
- Một dạng tương tự mở rộng của giao diện Runnable cho các hoạt động không đồng bộ. Cho phép bạn trả về một giá trị đã nhập và đưa ra một ngoại lệ đã kiểm tra. Mặc dù giao diện này không có phương thức run(), nhiều lớp java.util.concurrent hỗ trợ nó cùng với Runnable.
FutureTask<V>
— triển khai giao diện Tương lai/RunnableFuture. Một hoạt động không đồng bộ được lấy làm đầu vào cho một trong các hàm tạo ở dạng đối tượng Runnable hoặc Callable. Bản thân lớp FutureTask được thiết kế để khởi chạy trong luồng công nhân, ví dụ: thông qua Chủ đề mới(task).start() hoặc thông qua ThreadPoolExecutor. Kết quả của một hoạt động không đồng bộ được truy xuất thông qua phương thức get(...).
Delayed
- được sử dụng cho các tác vụ không đồng bộ sẽ bắt đầu trong tương lai, cũng như trong DelayQueue. Cho phép bạn đặt thời gian trước khi bắt đầu hoạt động không đồng bộ.
ScheduledFuture<V>
- giao diện điểm đánh dấu kết hợp giao diện Tương lai và Trì hoãn.
RunnableScheduledFuture<V>
- một giao diện kết hợp RunnableFuture và ScheduledFuture. Ngoài ra, bạn có thể chỉ định xem tác vụ là tác vụ một lần hay sẽ được chạy ở tần suất đã chỉ định.