并发实战题(一)

简介:

实现一个流控程序。控制客户端每秒调用某个远程服务不超过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)); } }


文章转自 并发编程网-ifeve.com

相关文章
|
6月前
|
消息中间件 存储 前端开发
[笔记]C++并发编程实战 《四》同步并发操作(三)
[笔记]C++并发编程实战 《四》同步并发操作(三)
|
3月前
|
缓存 安全 算法
Java并发简介(什么是并发)
Java并发简介(什么是并发)
|
5月前
|
安全 前端开发 程序员
C++11 并发编程基础(一):并发、并行与C++多线程
C++11标准在标准库中为多线程提供了组件,这意味着使用C++编写与平台无关的多线程程序成为可能,而C++程序的可移植性也得到了有力的保证。另外,并发编程可提高应用的性能,这对对性能锱铢必较的C++程序员来说是值得关注的。
110 0
C++11 并发编程基础(一):并发、并行与C++多线程
|
6月前
|
存储 前端开发 安全
[笔记]C++并发编程实战 《四》同步并发操作(一)
[笔记]C++并发编程实战 《四》同步并发操作
|
6月前
|
存储 前端开发 Unix
[笔记]C++并发编程实战 《四》同步并发操作(二)
[笔记]C++并发编程实战 《四》同步并发操作(二)
|
6月前
|
存储 前端开发 调度
[笔记]C++并发编程实战 《四》同步并发操作(四)
[笔记]C++并发编程实战 《四》同步并发操作(四)
|
6月前
|
安全 程序员 API
[笔记]C++并发编程实战 《一》你好,C++的并发世界(一)
[笔记]C++并发编程实战 《一》你好,C++的并发世界
|
6月前
|
算法 编译器 程序员
[笔记]C++并发编程实战 《一》你好,C++的并发世界(二)
[笔记]C++并发编程实战 《一》你好,C++的并发世界(二)
|
安全 Java API
java并发原理实战(1) -- 聊聊并发
java并发原理实战(1) -- 聊聊并发
java并发原理实战(1) -- 聊聊并发
|
安全 IDE 开发工具
并发知识点
并发知识点
78 0