5

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..
}
4

2 回答 2

3

令人惊讶的是您可以编译您的代码:您正试图将一些添加Future<Boolean>List<Boolean>...

resultsList应声明为:

List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>> ();

myClassImplementingCallable除此之外,除非其中一个为listOfClassesImplementingCallable空,否则您不应按原样收到带有代码的 NPE 。

于 2013-01-30T10:02:17.237 回答
0

你应该使用List<Future<Boolean>> resultsList = new ArrayList<Future<Boolean>>();

    for ( Future< Boolean > result : resultList ) {
    result.get(); // getting exception here..
}

resultsList 不是代码中的数组

于 2013-01-30T10:13:06.673 回答