2015-02-21 12 views
10

Làm thế nào để Java Future.get() hoạt động trong trường hợp nó được gọi nhiều lần sau khi tác vụ được hoàn thành? Nó có trả về cùng một kết quả không? Hoặc có ném một lần nữa ExecutionException với cùng ngoại lệ nếu tính toán không thành công? Tôi không thể tìm thấy bất kỳ nội dung nào trong tài liệu về nó!Java - Future.get() nhiều lời gọi

+0

Các [tương lai] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html) tài liệu lớp học (và [Future.get] (https://docs.oracle.com/javase/8/docs /api/java/util/concurrent/Future.html#get--)) trả lời hầu hết các câu hỏi - chắc đã đọc cái gì khác. – user2864740

+1

Và bạn cũng có thể thử và tự mình xem. –

Trả lời

18

Bạn có thể gọi get() theo số Future bao nhiêu lần tùy thích và sẽ chỉ chặn nếu tác vụ tạo kết quả chưa hoàn thành.

Nếu tác vụ đã hoàn thành, nó sẽ ngay lập tức trả về kết quả của tác vụ.

Nếu tác vụ không thành công với ngoại lệ, hãy gọi get() sẽ ném ExecutionException mỗi lần bạn gọi.

4

Tôi không thể tìm thấy bất kỳ nội dung nào trong tài liệu về nó!

Bạn đã đọc chúng chưa? bởi vì khi tôi đọc chúng tôi đã nhận lời và ở đây nó là ....

V get() 
throws InterruptedException, 
     ExecutionException 

Waits nếu cần thiết cho việc tính toán để hoàn thành, và sau đó lấy kết quả của nó.

Returns: 
    the computed result 

Throws: 
    CancellationException - if the computation was cancelled 
    ExecutionException - if the computation threw an exception 
    InterruptedException - if the current thread was interrupted while waiting 

Nếu tính toán không được hoàn thành nó sẽ chờ, và nếu nó đã hoàn thành nó sẽ trả về kết quả càng sớm càng tốt, không có vấn đề bao nhiêu lần bạn gọi nó là

+0

Bạn đang đọc ở đâu? trong https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#get-- Tôi thấy: Chờ đợi nếu cần thiết để tính toán hoàn thành và sau đó truy xuất kết quả của nó . Không có phần cuối. Bạn nhận được thông tin đó ở đâu? Tôi không muốn dựa vào hành vi không có giấy tờ, tôi biết điều gì sẽ xảy ra nếu tôi thử, nhưng tôi muốn có hợp đồng chính xác. –

+0

@MarcoServetto, Vì vậy, hãy đọc kỹ dòng, nó sẽ đợi nếu quá trình không hoàn thành hoặc nó sẽ trả lại kết quả, Nó không được viết ở bất cứ nơi nào ngoại lệ sẽ đến nếu bạn gọi nó lặp đi lặp lại. sau đó đi đến kết luận' –

Các vấn đề liên quan