Control ExecutorService to execute N tasks per second maximum

后端 未结 2 626
执念已碎
执念已碎 2021-02-01 11:01

How to control/limit the tasks that are submitted to a ExecutorService? I have SMSTask that sends SMS messages and I need to control the executor so that it can onl

2条回答
  •  难免孤独
    2021-02-01 11:17

    Try RateLimiter from Guava. You must share one instance between all tasks running in the pool:

    final RateLimiter rateLimiter = RateLimiter.create(N)
    
    //and in your task:
    
    rateLimiter.tryAcquire();
    sendSms();
    

    tryAcquire(); will block for the amount of time precisely to preserve N frequency.

    See also:

    • RateLimiter - discovering Google Guava

提交回复
热议问题