在我的代码中,我将批量请求发送到自定义数据库。 每批的响应时间以毫秒为单位。
但是我对每秒可以发送的批次数有限制。最多一批。在额外批次的情况下,批次将被丢弃,这不是所期望的。
我可以使用Thread.sleep()
一秒钟,这样我就不会每秒使用多个批次来访问数据库。
伪代码如下:
createBatch()
sendBatch()
我要做的是限制在一秒钟内调用sendBatch()
的次数。
我可以使用任何限制库而不是使用Thread.sleep()
来实现此目的吗?
答案 0 :(得分:3)
您可以使用番石榴的RateLimiter 见:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/RateLimiter.html
答案 1 :(得分:1)
我认为这是限制一次可以使用的数量资源的问题。尝试使用池化技术。在java中,您可以使用ExecutorService来执行相同的操作。推荐 - http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html 这是示例代码
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) throws ExecutionException, InterruptedException {
final int poolSize = 100;
final int workerSize = 1000;
ExecutorService executor = Executors.newFixedThreadPool(poolSize);
Future[] futures = new Future[workerSize];
Worker[] workers = new Worker[workerSize];
for(int i = 0; i < workerSize; i++){
workers[i] = new Worker(i);
}
System.out.println("finished creating workers================");
for(int i = 0; i < workerSize; i++){
futures[i] = executor.submit(workers[i]);
}
for (int i = 0; i < workerSize; i++){
futures[i].get();
}
System.out.println("Finished executing all");
executor.shutdown();
}
}
// main mehtod
if (str != NULL && status != NULL)
}