ExecutorService.Submit(Callable <t>)返回Future <t>对象的空值</t> </t>

时间:2013-01-30 09:56:00

标签: java nullpointerexception executorservice

我正在使用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..
}

2 个答案:

答案 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不是代码中的数组