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 đó
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
Post a Comment