2012-08-02 23 views
5

Tôi đã kiểm tra Oracle Java API, mang đến cho một số thông tin rằng FutureTask.isDone()Java FutureTask hoàn thành kiểm tra

nhưng tôi cần phải kiểm tra xem các nhiệm vụ đã hoàn thành hoặc chấm dứt với bất kỳ lỗi. Phương thức isDone() sẽ trả về ngay cả khi nó hoàn thành/chấm dứt. Nhưng tôi cần phải biết liệu nó đã hoàn thành hay chấm dứt do một số vấn đề.

Trả lời

11

Nếu thực hiện FutureTask, hãy gọi get() sau đó (có thể không có bất kỳ thời gian chờ nào, nó sẽ trở lại ngay lập tức). Nó hoặc sẽ trả về kết quả một số hoặc ném:

ExecutionException - nếu tính toán ném một ngoại lệ

ExecutionException.getCause() sẽ trở lại với ngoại lệ ném từ nhiệm vụ của bạn.

+0

Bạn có thể gọi 'get()' ngay cả khi 'FutureTask' chưa được thực hiện; trong trường hợp này 'get()' chờ hoàn thành. – Pino

0

Tại sao không gọi FutureTask.get()?

Điều này sẽ trả về kết quả hoặc ném một ngoại lệ có chứa ngoại lệ ban đầu được ném/bị bắt. Nếu tác vụ chưa hoàn thành dit sẽ chặn và bạn có tùy chọn để cung cấp thời gian chờ.

Tôi sẽ bình thường mong đợi khách hàng chỉ cần gọi get() vào mỗi lần FutureTask lần lượt được tạo, thay vì cuộc thăm dò isDone().

0

Khi isDone() trả lại đúng, bạn muốn nhận kết quả bằng cách gọi phương thức get() để kiểm tra kết quả thực thi. Hoạt động get() có thể ném ExecutionException, bao gồm nguyên nhân, nơi bạn có thể tìm thấy sự cố.

+1

Bạn có thể gọi 'get()' ngay cả khi 'isDone()' là sai; trong trường hợp này 'get()' chờ hoàn thành. – Pino

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