繁体   English   中英

如何在循环的服务器请求中使用Phaser?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM