没有得到结果:使用completableFuture

时间:2019-07-01 16:00:32

标签: java multithreading executorservice completable-future

我想从两个API获得响应,然后再向前移动。为了达到这个目的,尝试使用completableFuture,但是在从“结果”对象获取响应时最终导致获取NullPointerException。 实际上,completefuture基本上没有数据。 无法调试直接运行的线程。

public APIResult execute() throws InterruptedException, ExecutionException {

        CompletableFuture<TaskChair> completableFutureChair = CompletableFuture.supplyAsync(()->new TaskChair(),executorChair);
        CompletableFuture<TaskBottle> completableFutureBottle = CompletableFuture.supplyAsync(()->new TaskBottle(),executorChair);


        CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(completableFutureChair, completableFutureBottle);
        combinedFuture.get();

        TaskChair taskChair = completableFutureChair.get();
        TaskBottle taskBottle = completableFutureBottle.get();

        List<Chair> chairs = taskChair.getChairs();
        List<Bottle> bottles = taskBottle.getBottles();

        APIResult result = new APIResult(chairs, bottles);

        return result;
    }


class TaskChair implements Callable<List<Chair>>{

    List<Chair> chairs;

    public List<Chair> getChairs() {
        return chairs;
    }
    public void setChairs(List<Chair> chairs) {
        this.chairs = chairs;
    }

    @Override
    public List<Chair> call() throws Exception {
        chairs = new RestAPI().getChairs();
        return chairs;
        }
    }

public static void main(String[] args) {

        RestService service = new RestService();
        APIResult result = null;

        try {
            result = service.execute();
        } catch (InterruptedException | ExecutionException e) { }

        System.out.println("Chair API Status -> ");
        for(Chair chair:result.getChairs()) {
            System.out.println(" id : "+chair.getId()+" name : "+ chair.getName());
        }
    }

0 个答案:

没有答案