Java代码模拟并发请求和限制访问频率-JDK方法简单实现

本文介绍了如何在Java中通过多线程模拟10个并发客户端访问服务端的remote()方法,同时服务端限制该方法每秒最多被调用5次。通过一个简单的案例展示了在面试中可能会遇到的多线程编程问题,强调了实践对于理解和掌握并发工具类的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:最近面试遇到一道简单的多线程编程题

编程题

(1)客户端Client类10个并发去访问服务端的remote()方法

(2)服务端Server类remote()方法最多允许1秒被访问5次

服务端类Server

import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author zhougl
 * 2019/4/19
 **/
public class Server {
    // 限制允许访问的线程数的工具类
    private Semaphore s;
    // 过期时间
    private long time;
    // 访问频率
    private int rateLimiter;
    // 使用此工具类来实现线程安全地递增
    private AtomicInteger atomicInteger = new AtomicInteger(0);

    public Server(Semaphore s, long time, int rateLimiter) {
        this.s = s;
        this.time = time;
        this.rateLimiter = rateLimiter;
    }

    public String remote(){
        long l = System.currentTimeMillis();
        if(l <= time && atomicInteger.getAndIncrement() < rateLimiter){
            try {
                s.acquire();
                System.out.println("remote方法被调用,调用线程为:"+Thread.currentThread()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值