[英]How can I use Phaser inside loop's server request?
我的代码是这样的:
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
列表),或者使Result implements Comparable<Result>
,然后从那里开始使用自然排序。
另外: ArrayList
不是线程安全的(仅通过变量名)。 如果您在实际生产代码中使用它,我建议您使用Collections.synchronizedList(new ArrayList<>())
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.