我正在使用ExecutorService
生成线程来执行不同的任务。在创建submit(Callable<T>)
方法时,它应返回Future<T>
个对象。相反,它返回null。因此,当调用Future<T>.get()
方法时,它将失败并显示NullPointerException
。
有没有人遇到这个问题?或者,我做错了什么?
ArrayList<Boolean> resultsList = new ArrayList<Boolean> ();
ExecutorService excutorService = Executors.newCachedThreadPool();
for(ClassImplementingCallable myClassImplementingCallable : listOfClassesImplementingCallable) {
resultsList.add( excutorService.submit( myClassImplementingCallable ) );
}
excutorService.shutdown();
for ( Future< Boolean > result : resultList ) {
result.get(); // getting exception here..
}
答案 0 :(得分:3)
令人惊讶的是,您可以编译代码:您正尝试将一些Future<Boolean>
添加到List<Boolean>
...
resultsList
应声明为:
List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>> ();
除此之外,除非myClassImplementingCallable
中的listOfClassesImplementingCallable
之一为空,否则您不应该按原样收到NPE。
答案 1 :(得分:0)
您应该使用List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>>();
for ( Future< Boolean > result : resultList ) {
result.get(); // getting exception here..
}
resultsList不是代码中的数组