Java可调用和未来

Java可调用和未来,java,callable,Java,Callable,我正在使用Java Callable,所以我正在编写一个运行并行任务的函数,它在第一次调用时运行得很好,但在另一次调用中,我的函数重复了迭代次数 请有人告诉我哪里出错了 这是我的代码: public void setInitialCost(List<Trajet> trajets) { int cores = Runtime.getRuntime().availableProcessors(); executor = Executors.newFixedThreadP

我正在使用Java Callable,所以我正在编写一个运行并行任务的函数,它在第一次调用时运行得很好,但在另一次调用中,我的函数重复了迭代次数 请有人告诉我哪里出错了 这是我的代码:

public void setInitialCost(List<Trajet> trajets) {
    int cores = Runtime.getRuntime().availableProcessors();
    executor = Executors.newFixedThreadPool(cores);
    List<Future<Double>> futures = new ArrayList<Future<Double>>();

    for (int i = 0; i < trajets.size(); i++) {

        Future<Double> future = executor.submit(new CallableCostCalculator(trajets.get(i).getPlannedTrips(), startPlanningView));
        futures.add(future);
        System.out.println("iteration" + i);

    }

    executor.shutdown();

    for (int j = 0; j < futures.size(); j++) {
        try {
            trajets.get(j).setCost(futures.get(j).get());
        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}
public void setInitialCost(列出trajets){
int cores=Runtime.getRuntime().availableProcessors();
executor=Executors.newFixedThreadPool(核心);
列表期货=新的ArrayList();
对于(int i=0;i
这是2次成功调用的结果:

我从这个控制器调用我的函数:

@Autowired
RechercheTabouService rechercheTabouService;
@Autowired
PlannedTripService plannedTripService;

public void test() {
    System.out.println("start test");
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    Date date;
    try {
        date = dateFormat.parse("12/11/2017");
        rechercheTabouService.setPlannedTrips(plannedTripService.findPlannedTripByDate(date, 1512127292, 200));
    } catch (Exception e) {
        e.printStackTrace();
    }

    rechercheTabouService.setInitialSolution();
    List<Trajet> initial = rechercheTabouService.getInitialSolution();
    rechercheTabouService.setInitialCost(initial);

    System.out.println("initial :" + rechercheTabouService.calculCostSolution(initial));

    @RequestMapping("/tabou")
    public Integer runtest () {
        test();
        return 1;
    }
}
@Autowired
RechercheTabouService RechercheTabouService;
@自动连线
PlannedTripService PlannedTripService;
公开无效测试(){
系统输出打印项次(“启动测试”);
DateFormat DateFormat=新的简化格式(“MM/dd/yyyy”);
日期;
试一试{
日期=dateFormat.parse(“2017年11月12日”);
rechercheTabouService.setPlannedTrips(plannedTripService.findPlannedTripByDate(日期:1512127292200));
}捕获(例外e){
e、 printStackTrace();
}
rechercheTabouService.setInitialSolution();
List initial=rechercheTabouService.getInitialSolution();
rechercheTabouService.setInitialCost(初始);
System.out.println(“初始:+rechercheTabouService.calculCostSolution(初始));
@请求映射(“/tabou”)
公共整数运行测试(){
test();
返回1;
}
}

请向我们展示调用方法的代码
setInitialCost()
。听起来您没有在调用之间清除
trajets
参数。Georg我正在更新我的帖子Kayaman我必须如何清除trajets你能解释更多吗