From afe2046bc80882e76ea18bf866fb92eb199a9535 Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:42:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20RateLimiter=20=E7=A7=BB=E9=99=A4=20synch?= =?UTF-8?q?ronized=20=E5=B9=B6=E6=B7=BB=E5=8A=A0=20volatile=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=8B=E4=BB=B6=E5=BE=AA=E7=8E=AF=E9=98=BB?= =?UTF-8?q?=E5=A1=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 审查发现 synchronized 在 Vert.x 事件循环中会严重阻塞并发。 ConcurrentHashMap 本身已线程安全,移除 synchronized 锁。 RequestInfo 字段添加 volatile 保证多线程内存可见性。 --- .../java/cn/qaiu/lz/common/interceptorImpl/RateLimiter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/RateLimiter.java b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/RateLimiter.java index 26612b9..0330d6f 100644 --- a/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/RateLimiter.java +++ b/web-service/src/main/java/cn/qaiu/lz/common/interceptorImpl/RateLimiter.java @@ -28,7 +28,7 @@ public class RateLimiter { MAX_REQUESTS, TIME_WINDOW, PATH_REG); } - synchronized public static Future checkRateLimit(HttpServerRequest request) { + public static Future checkRateLimit(HttpServerRequest request) { Promise promise = Promise.promise(); if (!request.path().matches(PATH_REG)) { // 如果请求路径不匹配正则,则不进行限流 @@ -71,8 +71,8 @@ public class RateLimiter { } private static class RequestInfo { - int count; - long timestamp; + volatile int count; + volatile long timestamp; RequestInfo(int count, long time) { this.count = count;