记录下java高并发控制每秒接口访问量
package test.thread.threadpool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
public class TestSemaphore {
final static int MAX_QOS = 10;
private static int count = 0;
final static Semaphore semaphore = new Semaphore(MAX_QOS);
public static void main(String[] args) throws InterruptedException {
long startL = System.currentTimeMillis();
ScheduledExecutorService schePool = Executors.newScheduledThreadPool(1);
schePool.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
System.out.println("访问量:"+count);
count=0;
semaphore.release(MAX_QOS/3);
}
}, 1000, 1000, TimeUnit.MILLISECONDS);
ExecutorService pool = Executors.newFixedThreadPool(10);
for(int i=100;i>0;i--){
pool.submit(new Runnable(){
@Override
public void run() {
for(int j=10;j>0;j--){
semaphore.acquireUninterruptibly(1);
call();
}
}
});
}
pool.shutdown();
pool.awaitTermination(1, TimeUnit.HOURS);
System.out.println("done cost:"+(System.currentTimeMillis()-startL)/1000);
}
public static synchronized void call(){
count++;
System.out.println(count);
}
}
分享到:
相关推荐
如果我现在的服务里接口1只能 支撑每1秒100次请求,那么如果1秒在100次以上的请求(如110次),那多出的10次就要主动拒绝服务。不然服务就会支持不住。本工具就是为这个而做。 1、单机内存版用来防止自己挂掉 2、...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...
`java.util.Timer`是一个轻量级的定时器类,它可以用来调度定时任务。它支持两种类型的调度:一次性执行(即只执行一次)和周期性执行(即重复执行)。`Timer`类内部使用了一个单线程的`Executor`来执行任务,因此它...
可以使用`iterator()`方法遍历所有Row,然后对每个Row使用`getCell(int columnIndex)`方法访问其Cell: ```java for (Row row : sheet) { if (row.getRowNum() == 0) continue; // 跳过表头 for (Cell cell : ...
对于频率控制,我们可以在每个API调用前检查其调用频率,并在超过限制时返回错误信息。 以下是一种基本的实现方式: 1. 创建一个自定义的注解,例如`@RateLimit`,用于标记需要限制的接口。 ```java @Target...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...
Java提供了多种同步机制,如synchronized关键字、wait()和notify()方法、Semaphore信号量以及CyclicBarrier和CountDownLatch等工具类。例如,如果两个线程需要交替进行(半径变化后圆心移动,或反之),可以使用wait...
同时,通过合理设置批处理大小,可以控制每次处理的数据量,确保系统资源的有效利用。 在实现过程中,可能包含以下关键步骤: 1. **数据分页**:根据数据库查询能力,设定合适的分页大小,如10000条或20000条,...
用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...
Java 视频抽帧技术是将视频中的每一帧图像提取出来,形成独立的图片文件的过程。这在多媒体处理、图像分析、计算机视觉等领域有广泛应用,例如制作动图、视频预览或者进行视频内容分析等。在Java中实现视频抽帧需要...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...
JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...