博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发实战题(一)
阅读量:7101 次
发布时间:2019-06-28

本文共 1136 字,大约阅读时间需要 3 分钟。

实现一个流控程序。控制客户端每秒调用某个远程服务不超过N次,客户端是会多线程并发调用,需要一个轻量简洁的实现,大家看看下面的一个实现,然后可以自己写一个实现。

import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class Test { final static int MAX_QPS = 10; final static Semaphore semaphore = new Semaphore(MAX_QPS); public static void main (String ... args) throws Exception { Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { semaphore.release(MAX_QPS/2); } }, 1000, 500, TimeUnit.MILLISECONDS); //lots of concurrent calls:100 * 1000 ExecutorService pool = Executors.newFixedThreadPool(100); for (int i=100;i>0;i--) { final int x = i; pool.submit(new Runnable() { @Override public void run() { for (int j=1000;j>0;j--) { semaphore.acquireUninterruptibly(1); remoteCall(x, j); } } }); } pool.shutdown(); pool.awaitTermination(1, TimeUnit.HOURS); System.out.println("DONE"); } private static void remoteCall(int i, int j) { System.out.println(String.format("%s - %s: %d %d",new Date(), Thread.currentThread(), i, j)); } }

文章转自

转载地址:http://sruhl.baihongyu.com/

你可能感兴趣的文章
xxx is not in the sudoers file
查看>>
maven 镜像网站
查看>>
OSI模型有7层结构
查看>>
go语言碎片整理之标准库log
查看>>
导航菜单栏
查看>>
linux权限及权限管理
查看>>
vim补充及多条件判断
查看>>
VM虚拟机下载与安装
查看>>
深入理解Java内存模型(六)——final
查看>>
步步为营搭建spring+springmvc+mybatis(oracle)项目
查看>>
MDaemon退信分析:553 MI:SUM
查看>>
Windws Srv 2008内置账户
查看>>
PMP-5A小伙子的备考历程
查看>>
电脑开机按F1的解决方法
查看>>
gdbserver静态编译-调试失败的原因
查看>>
AD --- 活动目录的日常管理操作(2)
查看>>
linux安装VMware-tools步骤
查看>>
WPF 布局管理器之 StackPanel、WrapPanel、DockPanel (6)
查看>>
PostgreSQL配置参数详解和配置错误解决办法(二)
查看>>
LAMP平台搭建
查看>>