限制对方法的调用次数

时间:2015-08-05 06:02:06

标签: java guava sleep throttling

在我的代码中,我将批量请求发送到自定义数据库。 每批的响应时间以毫秒为单位。

但是我对每秒可以发送的批次数有限制。最多一批。在额外批次的情况下,批次将被丢弃,这不是所期望的。

我可以使用Thread.sleep()一秒钟,这样我就不会每秒使用多个批次来访问数据库。

伪代码如下:

createBatch()
sendBatch()

我要做的是限制在一秒钟内调用sendBatch()的次数。

我可以使用任何限制库而不是使用Thread.sleep()来实现此目的吗?

2 个答案:

答案 0 :(得分:3)

答案 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)

}