Runable vs Callable

Runable là một interface mà nó dùng cho viêc thực hiện một công việc mất nhiều thời gian phản hồi ngay lập tức

Bạn sẽ không thể nhận kết quả là 1 giá trị khi thực hiện xong Runable

Vậy việc lấy giá trị sau khi thời gian chạy như vậy thì làm thế nào???

Bạn hoàn toàn có thể dùng biến share giữa các luồng để check và lấy giá trị

Với sự phức tạp việc quản lý task khi dùng chung biến share

Java đã phát triển một interface Callable

Callable chạy task ngầm như Runable nhưng nó hỗ trợ trả về dữ liệu sau khi thực hiện xong task
do vậy chúng ta có thể truy cập giá trị dễ dàng

vậy làm cách nào để lấy giá trị đó

Chúng ta phải dùng một Class là Future để thực hiện việc lấy dữ liệu thông qua Future.get()
 là phương thức để lấy dữ liệu, khi phương thức get() được thực hiện nó sẽ block luồng hiện tại và chờ đợi khi có dữ liệu trả về

vậy điều gì nếu hàm get() bị timeout khi dữ liệu không trả về sau 1 thời gian
-- Luồng sẽ bị timeout theo

Vậy Completeable sẽ giải quyết được điều đó

Nó sẽ có tác dụng như Future

Nhưng nó có thêm hàm Completeable.complete("Giá trị trả về trong trường hợp hàm get() không trả về giá trị do timeout"). Do đó hàm này nên để trong một thread khác để check thời gian hoặc một điều kiệu nào đó

Comments

Popular posts from this blog

Fixing the DeepSpeed Import Error While Fine-Tuning the Qwen Model

Amazon Linux 2023 - User data configuration for launch templates to connect to the EKS cluster

How to create ISM policy and rotate logs in opensearch