背景描述:
系统中有excel下载,由于下载的数据量很大,特别消耗内存,如果涉及计算的话还特别吃cpu,所以对单台容器上一定时间内能接受的下载的请求必须加控制,否则会由于容器故障问题导致系统访问不了
解决方法:
采用jdk并发包中semaphore来控制一定时间内的下载请求的数量
public class TestDownload {
/**
* 同一时间接受请求的数量
*/
private static Semaphore semaphore =new Semaphore(10);
/***
*
*/
@Test
public void download(){
for(int i=0;i<100;i++){
Thread thread =new Thread(new Runnable() {
public void run() {
try {
System.out.println("====="+Thread.currentThread().getName()+"进入下载方法");
if(semaphore.availablePermits()==0){
System.out.println("系统繁忙请重试");
}
semaphore.acquire();//获取令牌尝试进入车位
System.out.println("====="+Thread.currentThread().getName()+"开始下载");
Thread.sleep(2000);//模拟下载方法
System.out.println("====="+Thread.currentThread().getName()+"下载完毕");
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
//释放信号量
semaphore.release();
}
}
});
thread.start();
}
}
}