[英]Flattening form using PDFClown throws IndexOutOfBounds exception
[英]traversing a List<Future> object throws IndexOutOfBounds exception
我有一個ExecutorService,用於調用Callable集合的obejcts,並返回與集合中Callable元素相對應的Future對象List。
但是,在遍歷列表的某個地方,它會引發以下異常:
java.util.concurrent.ExecutionException: java.lang.IndexOutOfBoundsException: Index: 7, Size: 1
at java.util.concurrent.FutureTask.report(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at com.soc.transformcsv.ParallelTransformationPool.doExecute(ParallelTransformationPool.java:91)
我一直在執行的代碼是
List<Future<StringBuilder>> futures = executor.invokeAll(builders);
executor.shutdown();
HashMap<String, List<StringBuilder>> allServiceTypeRows = new LinkedHashMap<>();
for (Future<StringBuilder> future : futures) {
// I have tried putting future.isDone() which always prints true before the exception
StringBuilder recordBuilder = future.get();
// do more
}
它在future.get()
行給出了錯誤。
請幫助解決障礙或讓我知道我還提供了什么。
即使Callable中存在異常 , isDone()
的結果也可能為true。 從isDone
文檔 :
如果此任務完成,則返回true。 完成可能是由於正常終止,異常或取消 - 在所有這些情況下,此方法將返回true。
所以有問題的未來已經完成,但在計算時遇到了錯誤。 在您發布的堆棧跟蹤下,應該有另一個,列出“由...引起” - 這將導致您的Callable中的根失敗。
例如,請參閱此ideone鏈接的輸出。 成功檢查isDone
為true 后會出現此異常:
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.RuntimeException: This is a failure!
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at Ideone.main(Main.java:16)
Caused by: java.lang.RuntimeException: This is a failure!
at Ideone$SampleCallable.call(Main.java:21)
at Ideone$SampleCallable.call(Main.java:19)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at Ideone.main(Main.java:14)
遍歷List<Future>
不會發生異常。 實際上,當ExecutorService
正在執行Callable
(其中一個builders
)的call()
方法時,會發生IndexOutOfBoundsException
。
但是,只有當您嘗試使用future.get()
獲取Future
的結果時,才會拋出此異常(包含在ExecutionException
future.get()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.