Java 接口限速:20次/2秒并发控制详解
在 Java 中,可以使用 Semaphore 信号量来实现接口的限速。Semaphore 是一个计数信号量,可以控制同时访问某个资源的线程数目。
首先,创建一个 Semaphore 对象,并设置许可数为 20,表示同一时间最多允许 20 个线程同时访问接口:
Semaphore semaphore = new Semaphore(20);
在需要访问接口的地方,使用 acquire 方法获取一个许可,如果没有许可可用,线程会被阻塞,直到有许可可用:
semaphore.acquire();
接口访问完成后,使用 release 方法释放一个许可:
semaphore.release();
这样就可以限制同时访问接口的线程数。如果希望在 2 秒内最多发起 20 个请求,可以使用 ScheduledExecutorService 定时任务,每隔 100 毫秒发起一个请求,然后使用 Semaphore 来限制同时访问接口的线程数。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(() -> {
semaphore.acquire();
// 发起接口请求的代码
// ...
semaphore.release();
}, 0, 100, TimeUnit.MILLISECONDS);
这样就能够实现在 2 秒内最多发起 20 个请求,并且限制并发情况下的访问速度。
原文地址: https://www.cveoy.top/t/topic/o9a9 著作权归作者所有。请勿转载和采集!