问题描述
我正在尝试处理API速率限制。我发现使用ratelimiter
可以阻止资源的使用。因此,在下面的代码中,我试图只有两个线程,直到批处理(size
)完成处理为止。
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicInteger;
import com.google.common.util.concurrent.RateLimiter;
public class thenapply {
public static void main(String[] args) throws InterruptedException,ExecutionException {
List<Integer> list = Arrays.asList(1,2,3);
final AtomicInteger sum = new AtomicInteger(0);
final RateLimiter rateLimiter = RateLimiter.create(2.0); // rate is "2 permits per second"
int size = list.size();
CountDownLatch latch = new CountDownLatch(size);
for (int i = 0; i < size; i++) {
final int finali = i;
rateLimiter.acquire(); // should wait till I get 2 requests
CompletableFuture.runAsync(() -> {
int sq= newdoc(list.get(finali));
sum.addAndGet(sq);
latch.countDown();
});
}
latch.await();
System.out.println(sum);
}
public static int newdoc(int val){
return val*val;
}
}
-
实时地,当我们尝试使用该服务时,最终用户将尝试调用该服务,如果他多次调用该服务,则会引发一些错误。我们如何使用
delay
处理该问题。因此,基本上,目前我有两个使用ratelimiter
的请求,之后将不处理任何请求。我如何将它们与delay
排队? -
ratelimiter.acquire()
什么时候可以自由提供资源?如果在处理完两个请求之后,那么latch.countDown
循环之后我的for
会怎样呢?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)