Java常见限流用法介绍和实现
    		       		warning:
    		            这篇文章距离上次修改已过431天,其中的内容可能已经有所变动。
    		        
        		                
                
import java.util.concurrent.TimeUnit;
 
public class RateLimiterExample {
    public static void main(String[] args) {
        // 使用Guava库的RateLimiter实现限流
        // 每秒允许2个令牌的通过
        RateLimiter rateLimiter = RateLimiter.create(2.0);
 
        // 模拟10个并发任务
        for (int i = 0; i < 10; i++) {
            final int taskId = i;
            // 异步执行任务
            new Thread(() -> {
                // 从RateLimiter获取许可
                rateLimiter.acquire();
                try {
                    // 模拟任务耗时处理
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Task " + taskId + " executed.");
            }).start();
        }
 
        // 等待所有任务执行完毕
        try {
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}这段代码使用了Guava库的RateLimiter类来实现限流,每秒允许两个任务通过。每个任务通过rateLimiter.acquire()获取执行的许可。这是一个简单的并发控制示例,展示了如何使用限流来管理资源的访问速率。
评论已关闭