2012-03-02 28 views
13

thể trùng lặp:
Handling exceptions from Java ExecutorService tasksở đâu để bắt ngoại lệ ném từ Callable.call()

tôi sử dụng ExecutorService từ Java phối hợp Chủ đề. Ví bắt đầu đề tôi sử dụng

pool = new ExecutorService(2); 
callableResults = pool.invokeAll(threads); 

Để thu thập kết quả, tôi sử dụng future.get() cho mỗi thread. "chuỗi" là Danh sách các đối tượng từ một Lớp thực hiện Callable và ghi đè call().

Hiện tại, tôi gặp sự cố sau. Phương thức call() thực hiện ném các ngoại lệ cụ thể khác nhau. invokeAll()future.get() chỉ ném InterruptedException.

Tôi có thể bắt các ngoại lệ cụ thể mà tôi ném vào call() ở đâu? Hay tôi phải xử lý chúng ở đó? Nếu một trong những ngoại lệ đó được ném, thì kết quả là sau đó là InterruptedException?

+1

Tôi đã đọc điều này trước đây, nhưng tôi không thấy rằng anh ấy cũng sử dụng Gọi và gọi()? Có lẽ Ive giám sát nó !? chỉnh sửa: chính xác. Ive giám sát nó. lấy làm tiếc. – nano7

+2

Trong câu trả lời này: http://stackoverflow.com/a/2248166/118846 –

+1

Ông sử dụng Runnable nhưng ngoại lệ bắt là như nhau. – Gray

Trả lời

23

AFAIR java.util.concurrent.Future.get() sẽ ném ExecutionException nếu được cung cấp có thể gọi đã ném ngoại lệ trong quá khứ (ngoại lệ được lưu trữ trong Future).

Ngoại lệ được ném khi cố truy xuất kết quả của tác vụ bị hủy bỏ bằng cách ném ngoại lệ. Ngoại lệ này có thể được kiểm tra bằng phương pháp Throwable.getCause().

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