Java-等待Lambda完成,然后继续

时间:2018-11-03 22:47:52

标签: java lambda

我必须从API获取数据,所以自然地,我有一个通过lambda访问的终结点处理程序,我假设它产生了多个线程来完成我需要的每个API调用。但是,在所有API调用完成(所有lambda线程完成)之后,我需要整理数据。目前,我已经在主线程上运行了Sort方法,因此在lambda中的任何API调用完成之前就完成了。这是我所拥有的样品

for(String data : dataArray) {
    APIEndpoint apiCall = new APIEndpoint("http://sampleAPI.org/route/" + data);
    apiCall.execute(((response, success) -> {
        //Format and gather the info from the response
        apiDataArray.add(DataFromAPIObject);
    }));
}
System.out.print(apiDataArray.size());//Returns 0
sortData();//Currently Doesn't Sort anything because the array is empty

编辑:这是我正在使用的端点执行器: https://github.com/orange-alliance/TOA-DataSync/blob/master/src/org/theorangealliance/datasync/util/FIRSTEndpoint.java

1 个答案:

答案 0 :(得分:0)

可以使用信号量。但是,如果由于某种原因,至少data个点中的一个没有响应,它将死锁。 (要修复死锁,您可能需要释放错误时的信号量。)

    Semaphore semaphore = new Semaphore(dataArray.length);
    for (String data : dataArray) { 
        semaphore.acquire();        
        APIEndpoint apiCall = new APIEndpoint("http://sampleAPI.org/route/" + data);
        apiCall.execute(((response, success) -> {
            // Format and gather the info from the response
            apiDataArray.add(DataFromAPIObject);
            semaphore.release();
        }));
    }
    semaphore.acquire(dataArray.length);
    sortData();