Có ai có thể chỉ cho tôi một số tài liệu hướng dẫn rõ ràng rằng 'Future.get` có thời gian chờ là 0 sẽ không đợi?Hành vi của future.get với thời gian chờ là
Tài liệu API cho java.util.concurrent.Future
không làm rõ hành vi của future.get(0, unit)
. Tự mình đứng lên, tuyên bố "Chờ đợi nếu cần thiết cho hầu hết thời gian nhất định ..." ngụ ý lời kêu gọi này sẽ không chờ đợi chút nào, nhưng với hành vi lâu dài của Object.wait(0)
(chờ đợi vô hạn), tôi lo lắng phụ thuộc trên cơ sở "không chờ đợi" hành vi của future.get(0, unit)
quét nguồn gốc của một số lớp JDK-cung cấp (tức. FutureTask
) tôi thấy rằng việc thực hiện đặc biệt này của Future
không đợi khi thời gian chờ là 0.
tôi d muốn có thể nói
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
nhưng tôi lo lắng về tương lai thực hiện đó là một chờ đợi vô hạn, vì vậy thay vào đó, tôi đã mã hoá nó một cách rõ ràng cách tôi mong chờ nó để làm việc:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
@skaffman Cảm ơn bạn đã sửa thẻ. – mwhidden