我的代码是这样的:
someFunction() {
// countdownlatch is set up here
for (i = 0; i<cyclesCount; i++) {
//request is sending
someServerRequest.executeWithListener(new CustomListener() {
@Override
public void onComplete(Integer response) {
arraylist.add(response);
}
});
}
//countdownlatch waits here
//do something with arraylist
}
CountDownLatch 有助于等待循环,但其中的每个服务器请求都是在单独的线程中完成的。所以我以随机顺序收到回复,这不适合我。
我尝试以不同的方式使用 Phaser 和 CountDownLatch,但它对我不起作用。
你可以(例如)使Result
类,并添加的情况下,即到ArrayList
。例如:
private static class Result {
private final int resultNumber;
private final Integer response;
private Result(final int resultNumber, final Integer response) {
this.resultNumber = resultNumber;
this.response = response;
}
}
然后有
for (i = 0; i < cyclesCount; i++) {
someServerRequest.executeWithListener(new CustomListener() {
@Override
public void onComplete(Integer response) {
arrayList.add(new Result(i, response));
}
});
}
然后,您可以根据 对列表进行排序resultNumber
(responses
如果需要,还可以将其映射到 的列表),或者 makeResult implements Comparable<Result>
然后从那里使用自然排序。
另外:ArrayList
不是线程安全的(只是按照变量的名称)。Collections.synchronizedList(new ArrayList<>())
如果您在实际生产代码中使用它,我建议您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句