背景:最近面试遇到一道简单的多线程编程题
编程题
(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()