Java ExecutorServicve.invokeAll()不';不要打电话
陷入一种奇怪的境地。在本地调试项目时,在同一项目的单元测试中,ExecutorService invokeAll正确地进入call()方法 但是,当我将我的项目作为更大项目的一部分进行测试时(我的项目包含在jar中-我已经三次验证了依赖关系是否运行最新的代码),exectorService.invokeAll(任务)不会进入call()。以下是示例代码:Java ExecutorServicve.invokeAll()不';不要打电话,java,multithreading,parallel-processing,executorservice,callable,Java,Multithreading,Parallel Processing,Executorservice,Callable,陷入一种奇怪的境地。在本地调试项目时,在同一项目的单元测试中,ExecutorService invokeAll正确地进入call()方法 但是,当我将我的项目作为更大项目的一部分进行测试时(我的项目包含在jar中-我已经三次验证了依赖关系是否运行最新的代码),exectorService.invokeAll(任务)不会进入call()。以下是示例代码: public class ReaderWithBusinessRulesImpl implements Callable<List<
public class ReaderWithBusinessRulesImpl implements Callable<List<FsDealWrapper>> {
@Override
public List<FsDealWrapper> call() throws Exception{
return read(deals, context, cobFrom, cobTo);
}
public类ReaderWithBusinessRulesImpl实现可调用{
@凌驾
公共列表调用()引发异常{
返回读取(交易、上下文、cobFrom、cobTo);
}
执行这些可运行任务的类
final List<ReaderWithBusinessRulesImpl> tasks = Lists.newArrayList();
for (List<FsDeal> dealsChunk : Lists.partition(req.getDeals(), readSize)) {
tasks.add(new ReaderWithBusinessRulesImpl(fsDao, dealRequestsGenerator, dealsChunk, req.getContext(), cobFrom, cobTo));
}
try {
for (Future<List<FsDealWrapper>> results : service.invokeAll(tasks)) {
final List tasks=Lists.newArrayList();
for(List dealshunk:Lists.partition(req.getDeals(),readSize)){
添加(新的ReaderWithBusinessRulesImpl(fsDao、dealRequestsGenerator、dealsChunk、req.getContext()、cobFrom、cobTo));
}
试一试{
for(未来结果:service.invokeAll(任务)){
最后一行(如上)仅在本地执行时正确地进入call()方法,而不是在另一个项目中
有什么建议吗?现在可以用了。我以前没有打电话()带有@Override注解的方法。包括@Override现在给了我我所期望的结果。你确定没有其他问题。这个解决方案对我来说似乎有点奇怪
@Override
注解只是为了编译时的安全;肯定还有另一个问题。@JacobG这似乎解决了我的程序的问题,我没有做任何其他更改艾德。这对我来说也有点怀疑,但我会接受它……现在。。。。。